关于方案中的报价(')



我的理解是,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术语,用于数字类型系统。"全塔"意味着拥有"作品":复数、有理数、大整数、多精度浮点数等等。

相关内容

  • 没有找到相关文章

最新更新