«Цитата» отображается в выходных данных при добавлении со сгибом влево на схеме - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь объединить списки в схеме, используя сложение влево и добавление (для использования в большей функции). Тем не менее, я продолжаю получать результаты, которые выглядят так:

=> (0 quote (1) quote (2))

Это мой код:

(fold-left (lambda(a b) (append a b)) '(0) '('(1) '(2)))

Почему бы не работать так же, как:

(define x (append '(0) '(1)))
(define y (append x '(2)))
y

Этот код выводит простой список:

(0 1 2)

Не делает ли сложение влево то же самое, что и для второго блока кода? Что я могу изменить, чтобы получить простой вывод списка?

1 Ответ

0 голосов
/ 16 сентября 2018

Вы цитируете внутри указанных данных. Когда Схема встречает (quote x) или, кратко, 'x, она оценивает ее как аргумент без изменений ..

'('(1) '(2)))

Сокращенно от:

(quote ((quote (1)) (quote (2))))

И, согласно моим установленным правилам оценки, он должен оценивать:

((quote (1)) (quote (2)))

Таким образом, если вы берете caar или это выражение в кавычках, вы должны получить символ quote:

(caar '('(1) '(2)))
; ==> quote

Если вы не собирались включать эти кавычки в структуру данных, вам не нужно включать их в выражение, например:

'((1) (2))

NB: Существует язык, связанный со Scheme, называемый Racket, по умолчанию в их REPL выводится не само значение, а выражение, которое будет оценивать это значение. Обычно это сбивает с толку даже опытных интриганов. Это все равно, что спросить кого-то "что такое 3 плюс 4" и ответить 1 plus 6.

...