2011-01-03 4 views
11

Можно создать дубликат:
How many primitives does it take to build a LISP machine? Ten, seven or five?Самая минимальная LISP?

Мне любопытно. Какой самый минимальный LISP, на котором можно было бы построить все дополнительные функции? Игнорируйте эффективность - вопрос приходит просто из места элегантности.

Если вы проснулись на чужой планете и получили указание построить самый минимальный LISP, который позже вы могли бы реализовать, чтобы реализовать любую понравившуюся вам функцию, что бы вы включили?

Редактировать: Уточнение. Мое намерение здесь состоять в том, чтобы не начать дискуссию, скорее я подумываю о внедрении минимальной LISP, и я хочу понять, насколько минимально я могу идти, сохраняя при этом язык, который я реализую, чтобы завершить Turing и т. Д. Если это окажется спорным, я я уверен, что я узнаю, что я хотел узнать, наблюдая за полемикой. :). Благодаря!

+0

Как выглядит это субъект? Это может быть дубликат (я думаю, что однажды увидел подобный вопрос, пойдет искать сейчас). – delnan

+1

Нашел это: [Сколько примитивов требуется для создания LISP-машины? Десять, семь или пять?] (Http://stackoverflow.com/questions/3482389/how-many-primitives-does-it-take-to-build-a-lisp-machine-ten-seven-or-five) (Также имеет ссылку на другой вопрос, который касается и этой темы). – delnan

+0

Вы хотите, чтобы минимальное количество операций для языка было завершено или чтобы можно было определить все найденные языковые функции, например. в общем lisp? – sepp2k

ответ

4

Питер Норвиг реализовал интерпретатор LISP в 90 строках Python, и в его последующей статье подробно обсуждается то, что вы просите. Ну стоит прочитать, ИМХО.

http://norvig.com/lispy.html

У меня такое ощущение, что его «последовательность» особая форма может быть отброшен, если только вызовы функций может принимать произвольное число параметров.

(defun last (lst) 
    (if (cdr lst) 
     (last (cdr lst)) 
     (car lst))) 

(defun begin (:rest y) (last y)) 

Но это осложнило бы применение функции.

Смежные вопросы