Я привык к тому, что (quote x)
оценивается как x
, (quote (x y z))
оценивается как (x y z)
, а (car (quote (x y z))
оценивается как x
. Рассуждение простое: цитата — это особая форма, которая не вычисляет свой аргумент, а просто возвращает его как есть.
Я только начал использовать Racket, и он считает, что (quote x)
оценивается как (quote x)
, (quote (x y z))
оценивается как (quote (x y z))
, а (car (quote (x y z))
оценивается как (quote x)
.
Ну, на самом деле, он печатает их как 'x
, '(x y z)
и 'x
соответственно, но это одно и то же.
Может ли кто-нибудь объяснить аргументацию здесь? Если по какой-то причине (quote (x y z))
оценивается как (quote (x y z))
, не должна ли машина этого автомобиля быть quote
? Откуда (quote x)
?
Насколько я могу судить, Racket на протяжении всего вычисления внутренне ведет себя так же, как я привык, за исключением того, что когда приходит время печатать окончательный результат, он оборачивает его в форму цитаты. Во всех ли случаях это правильно? И если да, то зачем ему это делать?