Действительно минимальный lisp

какой минимальный набор примитивов требуется, чтобы язык был полным Тьюринга и вариантом lisp?

кажется, что автомобиль, cdr и некоторый контроль потока и что-то для REPL достаточно. Хорошо бы такой список был.

предположим, что существует только 3 типа данных, целых чисел, символов и списков.(как в picolisp)

5 ответов


есть хорошее обсуждение этого в Lisp FAQ. Это зависит от вашего выбора примитивов. Оригинальное "руководство программиста LISP 1.5" Маккарти сделало это с пятью функциями: CAR, CDR, CONS, EQ и ATOM.


на лямбда-исчисление полный Тьюринга. У него есть один примитив-лямбда. Перевод этого на синтаксис lisp довольно тривиален.


Я считаю, что минимальный набор-это то, что Джон Маккарти опубликовал в оригинальной статье.

корни Lisp.

код.



лучший способ узнать это наверняка - это реализовать его. Я 3 лета, чтобы создать Zozotez который является MCCARTY-ish LISP работает на Brainfuck.

Я попытался узнать, что мне нужно, и на форуме вы найдете поток, который говорит вам нужна только лямбда. таким образом, вы можете сделать целую шепелявость в лямбда-исчислении, если хотите. Я нашел это интересным, но это вряд ли путь, если вы хотите что-то, что в конечном итоге имеет сторону эффекты и работает в реальном мире.

для полной шепелявости Тьюринга я использовал Павел Грэхемов объяснение бумаги и все, что вам действительно нужно, это:

  • символ-оценка
  • специальная форма цитата
  • специальная форма if (или cond)
  • специальная форма лямбда (аналогично цитате)
  • функция eq
  • функция atom
  • минусы функция
  • функция cdr
  • function-dispatch (в основном применяется, но на самом деле не подвергается системе, поэтому он обрабатывает список, где первый элемент является функцией)

это 10. В дополнение к этому, чтобы иметь реализацию, которую вы можете протестировать, а не только на чертежной доске: