"Quote" 在 Scheme 中附加 fold-left 时出现在输出中

"Quote" showing up in output while appending with fold-left in Scheme

我正在尝试使用 fold-left 和 append 连接方案中的列表(用于更大的函数)。但是,我不断得到如下所示的输出:

=> (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)

fold-left 不是和第二个代码块完全一样吗? 我可以更改什么以获得简单的列表输出?

您引用的是内部引用数据。当 Scheme 遇到 (quote x) 或简称 'x 时,它会将其计算为参数 unchanged..

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

是以下简称:

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

根据我规定的评估规则,它应该评估为:

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

因此,如果您使用 caar 或那个引用的表达式,您应该得到符号 quote:

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

如果您不打算在数据结构中使用这些引号,那么您不需要在表达式中使用它们,例如:

'((1) (2))

注意: 有一种与 Scheme 相关的语言,称为 Racket,它在其 REPL 中的默认输出是 而不是 值本身,而是将计算为该值的表达式。即使对于经验丰富的策划者来说,这通常也会令人困惑。这就像问某人 "what is 3 plus 4" 并回答 1 plus 6.