为什么(汽车''(ab))评价'引用?

Mul*_*mer 2 scheme functional-programming racket

我是初学者Scheme程序员,我想丰富我在函数式编程方面的知识.我在DrRacket IDE中编程.最近我发现了一些有趣的代码:

  (car ''(a b))
Run Code Online (Sandbox Code Playgroud)

输出:

  'quote
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释我为什么以这种方式进行评估?

Rpt*_*ptx 6

这是因为'它的缩写(quote ...).所以,

(car ''(a b))

实际上是

(car (quote (quote (a b))))

评估结果为:

'quote

正如Josh在评论中指出的那样,实际结果只是quote和REPL打印的表达式可以quote在这种情况下评估'quote或者与上面看到的相同(quote quote).


Ósc*_*pez 5

请记住'x(对于任何表达式x)只是简写(quote x),所以这段代码:

(car ''(a b))
Run Code Online (Sandbox Code Playgroud)

相当于这一个:

(car (quote (quote (a b))))
Run Code Online (Sandbox Code Playgroud)

现在很容易看出你正在评估car一个如下所示的列表:

'(quote (a b))
Run Code Online (Sandbox Code Playgroud)

哪个得到评估:

(list 'quote (list 'a 'b))
Run Code Online (Sandbox Code Playgroud)

如果我们使用car上面的行,我们将得到符号quote,这正是您看到的打印结果.