Действительно минимальный lisp
какой минимальный набор примитивов требуется, чтобы язык был полным Тьюринга и вариантом lisp?
кажется, что автомобиль, cdr и некоторый контроль потока и что-то для REPL достаточно. Хорошо бы такой список был.
предположим, что существует только 3 типа данных, целых чисел, символов и списков.(как в picolisp)
5 ответов
есть хорошее обсуждение этого в Lisp FAQ. Это зависит от вашего выбора примитивов. Оригинальное "руководство программиста LISP 1.5" Маккарти сделало это с пятью функциями: CAR, CDR, CONS, EQ и ATOM.
на лямбда-исчисление полный Тьюринга. У него есть один примитив-лямбда. Перевод этого на синтаксис lisp довольно тривиален.
Я считаю, что минимальный набор-это то, что Джон Маккарти опубликовал в оригинальной статье.
код.
лучший способ узнать это наверняка - это реализовать его. Я 3 лета, чтобы создать Zozotez который является MCCARTY-ish LISP работает на Brainfuck.
Я попытался узнать, что мне нужно, и на форуме вы найдете поток, который говорит вам нужна только лямбда. таким образом, вы можете сделать целую шепелявость в лямбда-исчислении, если хотите. Я нашел это интересным, но это вряд ли путь, если вы хотите что-то, что в конечном итоге имеет сторону эффекты и работает в реальном мире.
для полной шепелявости Тьюринга я использовал Павел Грэхемов объяснение бумаги и все, что вам действительно нужно, это:
- символ-оценка
- специальная форма цитата
- специальная форма if (или cond)
- специальная форма лямбда (аналогично цитате)
- функция eq
- функция atom
- минусы функция
- функция cdr
- function-dispatch (в основном применяется, но на самом деле не подвергается системе, поэтому он обрабатывает список, где первый элемент является функцией)
это 10. В дополнение к этому, чтобы иметь реализацию, которую вы можете протестировать, а не только на чертежной доске: