Functional programming &引用;引述;在输出中显示,同时在方案中添加左折

Functional programming &引用;引述;在输出中显示,同时在方案中添加左折,functional-programming,scheme,foldleft,Functional Programming,Scheme,Foldleft,我正在尝试使用foldleft和append(用于更大的函数)连接scheme中的列表。但是,我不断得到如下输出: => (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

我正在尝试使用foldleft和append(用于更大的函数)连接scheme中的列表。但是,我不断得到如下输出:

=> (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
时,它会将其求值为参数未更改

'('(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等于什么”,然后回答你在引用内部引用的数据。当Scheme遇到
(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加6

谢谢你的精彩解释。对我来说,这是一个更令人困惑的方案主题。谢谢你的精彩解释。对我来说,这是一个比较混乱的方案主题。可能的重复