Почему не работает с лямбда в Common Lisp?
Я пишу интерпретатор LISP (в C), и я нахожусь на стадии реализации лямбда-функций и set
языковые особенности. В моем переводчике следующие работы:
(set 'f (lambda (x) (cdr x)))
(f '(a b c))
Выведение (b c)
, Тем не менее, по-видимому, такие вещи не разрешены в Common Lisp, как я получаю Input a value to be used instead of (FDEFINITION 'F)
когда я попробую это в clisp
, Мои вопросы следующие:
- Почему это не разрешено в Common Lisp?
- Как достичь того же в Common Lisp?
- Что следует изменить в моем переводчике, чтобы подобные вещи не разрешались?
Чтобы помочь вам ответить на последний вопрос - в настоящее время set
Примитив в основном просто связывает атом со значением в окружающей среде. Приведенный выше код работает в моем интерпретаторе, потому что для оценки (f '(a b c))
это выглядит f
в среде находит, что это лямбда-функция, а затем применяет эту лямбда-функцию к аргументу '(a b c)
,
Спасибо за помощь.
Изменить: Это не дубликат "В чем разница между Лисп-1 и Лисп-2?". Хотя различия между Lisp-1 и Lisp-2 могут быть источником того, почему это не работает в clisp
мой вопрос действительно сосредоточен на механизмах set
примитив и его основная реализация.