common-lisp - 为什么 Common Lisp 在没有引号的情况下对符号进行评估?

标签 common-lisp racket symbols language-design evaluation

我习惯了 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
Racket 博士 REPL 与 #lang racket作为语言和未更改的选项 不会在交互窗口中为您提供结果 .它的作用是打印一个相等的表达式,该表达式的计算结果也相同。设计 Racket 的团队认为这在学习过程中更容易,但由于这些问题,我倾向于不同意。
标准 Racket 评估 'common-lispcommon-lisp因此,让表达式对其求值的一种方法是引用它,使其显示 ' common-lisp在 REPL 中。
它与一个以 16 为基数显示数字而另一个以 10 为基数的实现几乎相同。结果 B 和 11 是相同的,只是可视化不同。
您可以在 Dr Racket 中的语言选项中更改输出格式以获得实际值。某些语言,例如标准方案报告方案已经具有此功能。

关于common-lisp - 为什么 Common Lisp 在没有引号的情况下对符号进行评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67560334/

相关文章:

common-lisp - 我可以在他们的扩展站点中获取宏的边界吗?

Python 3.3 : printing special symbols like ♥ and ❦ when running through command line

mysql - 列名前的 SQL 语句中的 At-Sign

c - 如何找到共享库符号的绝对地址?

lisp - 抑制编译器错误

utf-8 - 如何让 quicklisp 在 Slime 中加载 rfc2388?

functional-programming - 纯功能性 Racket

command-line - 在 Racket 中启动子流程

common-lisp - `eval-when` 的意外行为

macros - cadr、caddr 等的可变版本