我的理解是,Scheme中的单引号'
是用来告诉Scheme后面的是符号,不是变量。因此,不应对其进行评估。
基于这种理解,当我在 REPL 中输入 '3/3
时,我不明白为什么 Chicken 会打印 1.0
。
CHICKEN
(c) 2008-2016, The CHICKEN Team
(c) 2000-2007, Felix L. Winkelmann
Version 4.11.0
linux-unix-gnu-x86-64 [ 64bit manyargs dload ptables ]
compiled 2016-08-23 on buildvm-13.phx2.fedoraproject.org
#;1> '3/3
1.0
我希望它打印 3/3
。为什么要对此进行评估而不是提供报价?
谢谢。
最佳答案
Quote 是一种扩展为 quote
表达式的语法。也就是说,'X
表示(quote X)
,无论X
是什么。 quote
是一个运算符,其值是参数语法本身。例如,(quote (+ 2 2))
的值是列表 (+ 2 2)
本身,而不是值 4
.同样,(quote a)
生成符号 a
而不是表达式 a
的值。
与其他 Lisp 方言一样,Scheme 程序是用数据符号编写的。 Scheme 程序源代码的每个元素都对应一个 Scheme 程序可以操作的可识别数据结构。 quote
是一种将程序主体的一部分作为文字对象访问的一种方式,将该对象传递到程序的运行时值空间中。
3/3
是一个表示数字的标记。该数字是 1.0
。有些对象有不止一个“拼写”。有时您在将对象输入 Lisp 系统时使用一种拼写,而在打印时使用不同的拼写。
3/3
计算不是通常的表达式计算,而是扫描 token 并将其转换为对象时发生的事情。
尝试输入 3/3
不带引号。
打个比方:你的问题是这样的:
How come when I type
'1.0E3
, I get1000.0
? The exponentE3
is being evaluated in spite of the quote!
但是,我希望 3/3
和 '3/3
产生 1
而不是 1.0
.
3/3
表示 1.0
的原因是 Chicken Scheme 没有完全支持有理数,“开箱即用”。请参阅此邮件列表帖子:
https://lists.gnu.org/archive/html/chicken-users/2013-03/msg00032.html
另请参阅推荐:有一个名为 numbers
的“鸡蛋”(Chicken Scheme 模块)提供了“全数字塔”。 “数字塔”是数字类型系统的 Lisp 行话。 “完整的塔”意味着拥有“作品”:复数、有理数、大整数、多精度 float 等。
关于scheme - 关于Scheme中的引号('),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44528168/