Вопрос
Ниже приведено упражнение из SICP.Я не мог разобраться в этом сам.Могут ли какие-нибудь причины помочь мне понять?
Введите следующий код в интерпретатор:
(car ''abracadabra)
И он распечатает "цитату".Почему?
Решение
Как сказал Гимпф, 'абракадабра = (цитата абракадабра). Вы можете убедиться в этом, набрав '' abracadabra в REPL, который напечатает (цитата abracadabra).
Другие советы
Потому что "абракадабра на самом деле (цитирую (цитирую абракадабру)).В Схеме правило таково:вычислите все части s-выражения и примените первую часть к остальным частям.
"автомобиль" и "цитата" - это символы, приведенные ниже.#car и #quote - это функции, на которые они ссылаются.
Если вы возьмете
(car (quote (quote abracadabra)))
и, оценив детали, вы получите
(#car (quote abracadabra))
Затем примените первую часть (функция car) ко второй части (список из двух символов).
quote
И вы получите просто символ "цитата".
Просто помните, чтобы понять, что происходит на Схеме, оцените отдельные части и примените первую ко всем остальным.Если вы оцениваете цитату, вы получаете то, что внутри.Единственная сбивающая с толку часть заключается в том, что некоторые примитивы (числа и строки) вычисляются сами по себе.