【问题标题】:The little schemer - semantic小计划者 - 语义
【发布时间】:2014-05-21 11:47:17
【问题描述】:

我刚刚开始阅读小阴谋家。我在理解某些单词时遇到了一些问题。

在第 27 页它说,

Eq 定律?

原始情商?有两个参数。每个必须是非数字原子。"

一个脚注说:在实践中,一些数字可能是 eq 的参数?

我使用球拍最小作为我的方案解释器。它将(eq? 10 10) 评估为#t

玩具章节有很多类似的问题。


作者所说的必须(标记为粗体)和脚注是什么意思?

【问题讨论】:

    标签: scheme racket the-little-schemer


    【解决方案1】:

    传统的做法是在指针本身中嵌入一些原始数据类型,例如低整数和字符,从而使这些数据类型成为eq?,即使数据在源中的不同时间/点出现在源中也是如此。但是,数字可以是任何大小,因此即使数字在某些时候达到特定的实现依赖大小,它们对于指针来说也会太大。当您尝试(eq? 10000000000 10000000000) 时,它可能在 32 位系统中为 #f,在 64 位系统中为 #t,而在任何系统中 (eqv? 10000000000 10000000000)#t

    【讨论】:

    • cons 怎么样。它说第二个表达式必须是一个列表。但是 (car (cons 'a 'b)) 计算结果为 'a。你能解释一下吗?
    • cons 创建一对。 carcdr 可以是任何类型,但只有当 cdrnull?list? 时,才能将结果称为正确的列表。 list? 是当链中的cdrpair? 而最后一个是null?。在cdr 中不以null? 结尾的列表称为点列表,例如。 (a b . c)(list? '(a b . c)) ; ==> #f
    • +1 知道了。找到了一个 20 分钟的关于方案的教程,在使用 TLS 之前阅读它可能很有用。谢谢
    • @silentboy 小Scheme方法是同化。它没有解释太多,并期望您最终得到它。如果这是您的第一种编程语言,那么它可能效果最好,因为您不再寻找突变或循环。我个人喜欢 Abelson 和 Scheme 的作者 Sussman 的 SICP videos
    • 我听说 SICP 是一本好书。但是,我决定阅读 TLS,在它之前的经验丰富的计划者。这是一条正确的道路吗?我认为自己擅长 C。
    【解决方案2】:

    Scheme 的真实身份谓词是eqv?Eq? 是一个优化版本,当应用于数字、字符或过程时,允许报告#f 而不是#teq? 的大多数 Scheme 实现在小的精确数字(称为“fixnums”)、字符和过程上做正确的事情,但在更大的数字或其他类型的数字上却失败了。

    所以说“必须”意味着如果你将eq? 应用于一个数字,你只能得到部分可预测的结果;脚注意味着在某些情况下(通常包括 10 个)你会侥幸逃脱。有关各种方案对 fixnums 的实际作用的详细信息,请参阅 R7RS 开发站点上的FixnumInfo

    【讨论】:

      猜你喜欢
      • 2013-09-01
      • 2012-08-26
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 2012-04-30
      相关资源
      最近更新 更多