关于Scheme中的引用(')

时间:2017-06-13 17:39:59

标签: scheme lisp chicken-scheme

我的理解是,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。为什么要对此进行评估而不是报价? 感谢。

1 个答案:

答案 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整数,多精度浮点数等等。