Я пытаюсь написать интерпретатор lisp, используя только примитивные функции lisp. Я писал свой eval, но я не уверен, как я могу определить ', поэтому я не оцениваю символ. Я понимаю, что 'x преобразуется внутренне (цитирует x), я запустил интерпретатор lisp и попробовал следующее:
(defun my-car (x) (car x))
(my-car (quote x)) -> QUOTE
(my-car '(x)) -> QUOTE
(my-car 'x) -> Error: Attempt to take the car of A which is not listp.
Я вижу, что в первых двух примерах машина определяет кавычку как первый элемент и возвращает ее, я не уверена, почему она не делает этого в последнем примере, хотя, по сути, 'x следует преобразовать в (цитата х) затем передал в качестве аргумента мою машину. Мне нужно проверить это для одного из базовых случаев my-eval, чтобы, если кавычка предшествовала атому, я не возвращал его значение. Есть ли способ сделать это, используя только примитивные функции?
Спасибо!