Ped*_*ino 3 evaluation symbols language-design common-lisp racket
我习惯了 Racket,我正在努力学习 Common Lisp。在 Racket 中,符号对自身进行评估,如 Dr Racket 的 REPL 所示:
> 'racket
'racket
Run Code Online (Sandbox Code Playgroud)
根据文献,在 Common Lisp 中,符号也会对自身求值。
实际上,引用对象的评估规则是:
带引号的对象计算为对象本身,不带引号。
在使用 REPL(Common Lisp、SBCL 和 Slime)时,我得到:
> 'common-lisp
common-lisp
Run Code Online (Sandbox Code Playgroud)
我觉得我需要接受有关两种语言设计之间对比的教育。
为什么会这样?考虑到 CL 的设计作为一种语言,这样做有什么意义?
我是否错过了关于 CLOS 的深刻见解?
我仍在为在不久的将来更好地了解 CLOS 打下基础。
谢谢
Syl*_*ter 10
TL;DR:这与 Common Lisp 无关。这就是 DrRacket REPL 的工作原理。你不能用 Racket 来学习 CL
带有#lang racketas 语言和未更改选项的 Dr. Racket REPL不会在交互窗口中为您提供结果。它的作用是打印一个相等的表达式,该表达式的计算结果也相同。设计 Racket 的团队认为这在学习过程中更容易,但由于这些问题,我倾向于不同意。
标准 Racket 的计算结果'common-lisp为,common-lisp因此获取表达式以对其进行计算的一种方法是引用它,以便它显示' common-lisp在 REPL 中。
它与一个以 16 为基数显示数字而另一个以 10 为基数的实现几乎相同。结果 B 和 11 是相同的,只是可视化不同。
您可以在 Dr Racket 中的语言选项中更改输出格式以获得实际值。某些语言,例如标准方案报告方案已经具有此功能。
在 Common Lisp 中,根据文献,符号也对自身求值
不。只有以自身为价值的符号才会对自身求值。
CL-USER 17 > foo
Error: The variable FOO is unbound.
Run Code Online (Sandbox Code Playgroud)
通常我们需要引用一个符号。带引号的符号计算为该符号。
CL-USER 19 > 'foo ; same as (quote foo)
FOO
Run Code Online (Sandbox Code Playgroud)
可以将的符号值设置FOO为FOO自身:
CL-USER 20 > (set foo 'foo)
FOO
CL-USER 21 > foo
FOO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |