'expression
дает expression
дословно, независимо от того, expression
. Однако Racket REPL имеет странную визуализацию, которая на самом деле не печатает результат, а скорее выражение, которое оценивает тот же результат. Таким образом, REPL напечатает 'expression
, даже если результат будет expression
. Оценивая вывод REPL, затем всегда печатает то же самое снова.
Итак, представьте, что вы делаете '(1 2)
, вы получаете '(1 2)
назад и делаете предположение, что '
каким-то образом является частью данных, и пытаетесь сделать '('(1 2) '(3 4))
вместо '((1 2) (3 4))
. Теперь, поскольку 'x
является сахаром для читателя для (quote x)
, вы сделаете '((quote (1 2)) (quote (3 4)))
с quote
просто символами, а не кодом.
Если вы действительно хотите (1 2)
, вам нужно сделать автомобиль, CDR, автомобиль или cadar
для краткости:
(cadar '((quote (1 2)) (quote (3 4))))
; ==> (1 2) , but racket will print '(1 2)
Если вы на самом деле не хотели получать дополнительные списки, а просто чтобы данные были ((1 2) (3 4))
, вы правильно сделали:
(car '((1 2) (3 4)))
; ==> (1 2) , but racket will print '(1 2)
Если вы display
значение, оно фактически выведет правильный результат: (display '(1 2))
печатает (1 2)
, а не '(1 2)
.
Существует настройка для отключения путаницы. В выпадающем меню внизу, где вы можете выбрать choose language
, и в разделе «Язык ракетки» у вас есть опции справа, где вы можете изменить «стиль вывода» на write
. Теперь он будет печатать (1 2)
, а не выражение, которое оценивается в (1 2)
на языке рэкет тоже.