我的理解是,Scheme中的单引号'
用于告诉Scheme,后面的内容是符号而不是变量。因此,不应该评估它。
基于这种理解,当我在REPL输入1.0
时,我不明白为什么鸡打印'3/3
。
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
。为什么要对此进行评估而不是报价?
感谢。
答案 0 :(得分:8)
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
评估不是通常的表达式评估,而是在扫描令牌并将其转换为对象时发生的事情。
尝试输入3/3
,不用报价。
类比:你的问题是:
为什么当我输入
'1.0E3
时,我得到1000.0
?尽管有引用,但正在评估指数E3
!
但是,我希望3/3
和'3/3
能够生成1
而不是1.0
。
3/3
表示1.0
的原因是Chicken Scheme并不完全支持有理数,而且#34;开箱即用"。查看此邮件列表发布:
https://lists.gnu.org/archive/html/chicken-users/2013-03/msg00032.html
另见建议:有一个" egg" (鸡计划模块)称为numbers
,提供"完整的数字塔"。 "数字塔"是数字类型系统的Lisp术语。 A"满塔"意味着拥有"作品&#34 ;:复数,有理数,bignum整数,多精度浮点数等等。