"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
.
我正在尝试使用 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
.