为什么 Common Lisp 会在没有引号的情况下对符号求值?
Why Common Lisp evaluates a symbol to itself without the quote?
我习惯了Racket,我正在努力学习Common Lisp。在 Racket 中,符号对自身求值,如 Dr Racket 的 REPL 所示:
> 'racket
'racket
根据文献,在 Common Lisp 中,符号也对其自身求值。
实际上,引用对象的评估规则是:
A quoted object evaluates to the object itself, without the quote.
在使用 REPL(Common Lisp、SBCL 和 Slime)时,我得到:
> 'common-lisp
common-lisp
我觉得我需要了解两种语言设计之间的对比。
为什么会这样?考虑到 CL 的设计作为一种语言,这样做的意义何在?
我是否遗漏了有关 CLOS 的一些深刻的东西?
我仍在为在不久的将来更好地理解 CLOS 打下基础。
谢谢
TL;DR:这与 Common Lisp 无关。这就是 DrRacket REPL 的工作原理。你不能用 Racket 来学习 CL
使用 #lang racket
作为语言和未更改选项的 Dr. Racket REPL 不会在交互式 window 中为您提供结果。它的作用是打印一个相等的表达式,该表达式的计算结果也相同。设计 Racket 的团队认为这在学习过程中更容易,但由于这些问题,我倾向于不同意。
Standard Racket 将 'common-lisp
计算为 common-lisp
,因此让表达式对其进行计算的一种方法是引用它,以便它在 REPL 中显示 ' common-lisp
。
它与一种显示以 16 为基数和另一种以 10 为基数显示数字的实现几乎相同。结果 B 和 11 相同,只是可视化方式不同。
您可以在 Dr Racket 的语言选项中更改输出格式以获得实际值。一些语言,比如标准方案报告方案已经有这个。
In Common Lisp, according to the literature, symbols also evaluate to itself
没有。只有以自己为价值的符号才会对自己求值。
CL-USER 17 > foo
Error: The variable FOO is unbound.
一般我们需要引用一个符号。带引号的符号计算为符号。
CL-USER 19 > 'foo ; same as (quote foo)
FOO
可以将FOO
的符号值设置为FOO
本身:
CL-USER 20 > (set foo 'foo)
FOO
CL-USER 21 > foo
FOO
我习惯了Racket,我正在努力学习Common Lisp。在 Racket 中,符号对自身求值,如 Dr Racket 的 REPL 所示:
> 'racket
'racket
根据文献,在 Common Lisp 中,符号也对其自身求值。
实际上,引用对象的评估规则是:
A quoted object evaluates to the object itself, without the quote.
在使用 REPL(Common Lisp、SBCL 和 Slime)时,我得到:
> 'common-lisp
common-lisp
我觉得我需要了解两种语言设计之间的对比。
为什么会这样?考虑到 CL 的设计作为一种语言,这样做的意义何在?
我是否遗漏了有关 CLOS 的一些深刻的东西?
我仍在为在不久的将来更好地理解 CLOS 打下基础。
谢谢
TL;DR:这与 Common Lisp 无关。这就是 DrRacket REPL 的工作原理。你不能用 Racket 来学习 CL
使用 #lang racket
作为语言和未更改选项的 Dr. Racket REPL 不会在交互式 window 中为您提供结果。它的作用是打印一个相等的表达式,该表达式的计算结果也相同。设计 Racket 的团队认为这在学习过程中更容易,但由于这些问题,我倾向于不同意。
Standard Racket 将 'common-lisp
计算为 common-lisp
,因此让表达式对其进行计算的一种方法是引用它,以便它在 REPL 中显示 ' common-lisp
。
它与一种显示以 16 为基数和另一种以 10 为基数显示数字的实现几乎相同。结果 B 和 11 相同,只是可视化方式不同。
您可以在 Dr Racket 的语言选项中更改输出格式以获得实际值。一些语言,比如标准方案报告方案已经有这个。
In Common Lisp, according to the literature, symbols also evaluate to itself
没有。只有以自己为价值的符号才会对自己求值。
CL-USER 17 > foo
Error: The variable FOO is unbound.
一般我们需要引用一个符号。带引号的符号计算为符号。
CL-USER 19 > 'foo ; same as (quote foo)
FOO
可以将FOO
的符号值设置为FOO
本身:
CL-USER 20 > (set foo 'foo)
FOO
CL-USER 21 > foo
FOO