Вопрос

Какой минимальный набор примитивов требуется такой, чтобы язык был завершен, а вариант Lisp?

Похоже, автомобиль, CDR и некоторый контроль потока и что-то для ревки достаточно. Будь хорошим, если есть такой список.

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

Это было полезно?

Решение

Там хорошая дискуссия об этом в FAQ FAQ. Отказ Это зависит от вашего выбора примитивов. Оригинальный «Risp 1.5 Risp 1.5 Risp 1.5» сделал это с пятью функциями: автомобиль, CDR, минусы, эквалайзер и атом.

Другие советы

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

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

Корни Лисски.

Код.

Лучший способ на самом деле знать это точно, если вы его реализуете. Я использовал 3 лежа для создания Zozotez. На котором находится Лисп Маккарти Мозги.

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

Для Turing Complete Lisp я использовал Пол Грахамс Объяснение бумаги Маккарти И все, что вам действительно нужно, это:

  • Оценка символов
  • Специальная форма цитата
  • Особая форма, если (или кондицион)
  • Специальная форма лямбда (похожа на цитату)
  • Функция EQ.
  • Функция атома
  • Функция минус
  • Функция автомобиля
  • Функция CDR.
  • Функциональная отправка (в основном применить, но фактически не подвергаться воздействию системы, чтобы она обрабатывала список, где первый элемент является функцией)

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

  • Функция чтения
  • Функция записи

Это 12. в моем Zozotez. Я назначаю set а также flambda (анонимные макросы, как лямбда), как и лямбда). Я мог бы накорлить его библиотеку, реализующую любой динамический связанный Lisp (ELISP, PicoLisp), за исключением файла ввода / вывода (потому что базовый BF не поддерживает его, отличный от stdin / stdout).

Я рекомендую всем, чтобы реализовать LISP1-интерпретатор, в обоих LISP а также (not LISP), чтобы полностью понять, как реализован язык. У Lisp очень простой синтаксис, так что это хорошая отправная точка. Для всех других языков программирования, как вы реализуете интерпретатор, очень похоже. Например. в SiCP видео Волшебники делают интерпретатор для логического языка, но структуру и как реализовать ее очень похоже на переводчик Lisp, даже если этот язык совершенно отличается от Lisp.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top