“引用”显示在输出中,同时在Scheme中附加fold-left

问题描述 投票:0回答:1

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

不是折叠左边做的和第二个代码块完全相同吗?我可以更改什么来获得简单的列表输出?

functional-programming scheme foldleft
1个回答
3
投票

您在引用的数据中引用。当Scheme遇到(quote x)或简称'x时,它会将其评估为参数不变。

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

简称:

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

正如我所说的评估规则,它应评估为:

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

因此,如果你采取caar或引用的表达式,你应该得到符号quote

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

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

'((1) (2))

注意:有一种与Scheme相关的语言,称为Racket,它在REPL中的默认输出不是值本身,而是一个可以计算该值的表达式。即使是经验丰富的阴谋家,这通常也会令人困惑。这就像问某人“什么是3加4”并回答1 plus 6

© www.soinside.com 2019 - 2024. All rights reserved.