我的理解是,Scheme 中'
的单引号用于告诉 Scheme 后面的内容是一个符号而不是变量。因此,不应对其进行评估。 基于这种理解,我不明白为什么当我在 REPL 输入'3/3
时,鸡打印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
表达式的语法。也就是说,'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
计算不是通常的表达式计算,而是在扫描令牌并将其转换为对象时发生的情况。
尝试输入不带引号的3/3
。
类比:你的问题是这样的:
为什么当我输入
'1.0E3
时,我得到1000.0
?尽管有报价,指数E3
正在评估中!
但是,我希望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
的"鸡蛋"(鸡方案模块),它提供"全数字塔"。"数字塔"是Lisp术语,用于数字类型系统。"全塔"意味着拥有"作品":复数、有理数、大整数、多精度浮点数等等。