Вопрос

Ниже приведено упражнение из SICP.Я не мог разобраться в этом сам.Могут ли какие-нибудь причины помочь мне понять?

Введите следующий код в интерпретатор:

(car ''abracadabra)

И он распечатает "цитату".Почему?

Это было полезно?

Решение

Как сказал Гимпф, 'абракадабра = (цитата абракадабра). Вы можете убедиться в этом, набрав '' abracadabra в REPL, который напечатает (цитата abracadabra).

Другие советы

Потому что "абракадабра на самом деле (цитирую (цитирую абракадабру)).В Схеме правило таково:вычислите все части s-выражения и примените первую часть к остальным частям.

"автомобиль" и "цитата" - это символы, приведенные ниже.#car и #quote - это функции, на которые они ссылаются.

Если вы возьмете

(car (quote (quote abracadabra)))

и, оценив детали, вы получите

(#car (quote abracadabra))

Затем примените первую часть (функция car) ко второй части (список из двух символов).

quote

И вы получите просто символ "цитата".

Просто помните, чтобы понять, что происходит на Схеме, оцените отдельные части и примените первую ко всем остальным.Если вы оцениваете цитату, вы получаете то, что внутри.Единственная сбивающая с толку часть заключается в том, что некоторые примитивы (числа и строки) вычисляются сами по себе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top