Mit-Scheme的空值?

时间:2012-02-02 16:11:04

标签: scheme sicp mit-scheme

谁能告诉我mit-scheme中的空值表示是什么?在SICP书中,它应该是“零”但它不起作用。 谢谢。

4 个答案:

答案 0 :(得分:21)

'()应该有效。基本上,scheme中的nil是空列表,因此引用空列表会给你nil。

答案 1 :(得分:10)

有历史。 访问http://web.archive.org/web/20070808004043/http://wiki.wordaligned.org/sicp/published/FrequentlyAskedQuestions

原创(破碎):http://wiki.wordaligned.org/sicp/published/FrequentlyAskedQuestions


上述常见问题解答中的文字(如果是互联网档案破损):

为什么“nil”不工作?

快速回答是:nil不再是Scheme的一部分,而是使用'()。答案很长......

第2章中的早期示例使用nil作为列表终止符,但是当使用(例如)MIT Scheme运行这些示例时,您会得到:

;Unbound variable: nil

同样,使用()null代替nil可能会对某些实现起作用,但两者都不可移植。向导书解决了此脚注中的问题

  

令人瞩目的是,Lisp方言标准化中的多少能量已经在几乎没有任何东西的论证中消散了:应该是一个普通的名字吗? nil的值应该是符号吗?它应该是一个清单吗?它应该是一对吗?在Scheme中,nil是一个普通的名称,我们在本节中将其用作一个变量,其值是列表末尾标记(正如true是具有真值的普通变量)。 Lisp的其他方言,包括Common Lisp,将nil视为特殊符号。本书的作者曾经忍受过太多的语言标准化争吵,他们希望避免整个问题。一旦我们在2.3节中引入了引用,我们将空列表表示为'()并完全省略变量nil。

由于这是写的,nil已经从Scheme标准中删除了 - 但是底线是:使用'(),而不是nil。 Mike在给电子清单的电子邮件中指出:

  

这是一个麻烦的事情,这个nil / null /'()业务。 Scheme48和       scm不定义null,guile定义它,但作为类似的过程       常见的lisp的null(与其nil一样,其行为类似于cl的nil,       它本身与'()不同 - 可能这有什么关系       与fsf的计划在guile重新做emacs)。我认为最好的选择是       用'()。

代替作者对nil的使用

[只需轻轻一点印刷清理,就可以更好地将Markdown和常用的ASCII输入匹配到相关的语言/实现中。]

答案 2 :(得分:1)

我使用MIT/GNU Scheme microcode 15.3()'()都可以。 (正如您所说,nilnull不起作用。)

1 ]=> ()

;Value: ()

1 ]=> '()

;Value: ()

1 ]=> (cons 1 ())

;Value 2: (1)

1 ]=> (cons 1 '())

;Value 3: (1)

答案 3 :(得分:0)

(list)'()和()可以表示null。例如,

(define (transpose mat) (accumulate-n cons () mat))

或用()或(列表)替换()。