Почему не работает с лямбда в 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, Мои вопросы следующие:

  1. Почему это не разрешено в Common Lisp?
  2. Как достичь того же в Common Lisp?
  3. Что следует изменить в моем переводчике, чтобы подобные вещи не разрешались?

Чтобы помочь вам ответить на последний вопрос - в настоящее время set Примитив в основном просто связывает атом со значением в окружающей среде. Приведенный выше код работает в моем интерпретаторе, потому что для оценки (f '(a b c)) это выглядит f в среде находит, что это лямбда-функция, а затем применяет эту лямбда-функцию к аргументу '(a b c),

Спасибо за помощь.

Изменить: Это не дубликат "В чем разница между Лисп-1 и Лисп-2?". Хотя различия между Lisp-1 и Lisp-2 могут быть источником того, почему это не работает в clispмой вопрос действительно сосредоточен на механизмах set примитив и его основная реализация.

0 ответов

Другие вопросы по тегам