关于Scheme中的引用(')

bab*_*bon 1 lisp scheme chicken-scheme

我的理解是,'Scheme 中的单引号用于告诉Scheme,后面的内容是符号而不是变量.因此,不应该评估它.基于这种理解,1.0当我进入'3/3REPL 时,我不明白为什么鸡打印.

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
Run Code Online (Sandbox Code Playgroud)

我希望它能打印出来3/3.为什么要对此进行评估而不是报价?谢谢.

Kaz*_*Kaz 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.0E3尽管有报价,但正在评估指数!

但是,我希望3/3'3/3生产1而不是1.0.

究其原因3/3表示1.0是鸡方案不具有有理数的全力支持,"开箱即用".查看此邮件列表发布:

https://lists.gnu.org/archive/html/chicken-users/2013-03/msg00032.html

另请参阅建议:有一个"鸡蛋"(Chicken Scheme模块)numbers,它提供了"全数字塔"."数字塔"是数字类型系统的Lisp术语."满塔"意味着具有"作品":复数,有理数,bignum整数,多精度浮点数等等.