Mit-Scheme的空值?

Khu*_* Vu 23 scheme sicp mit-scheme

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

Ret*_*ief 21

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


Tom*_*ang 10

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

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


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

为什么"零"不起作用?

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

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

;Unbound variable: nil
Run Code Online (Sandbox Code Playgroud)

类似地,使用()null代替nil可以在某些实现上工作,但两者都不可移植.向导书解决了此脚注中的问题

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

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

这是一个麻烦的事情,这个nil/null /'()业务.Scheme48和scm没有定义null,guile定义它但是作为一个类似于常见的lisp的null的过程(与其nil一样,其行为类似于cl的nil,它本身与'()不同 - 这可能与它有关fsf计划在guile中重新制作emacs).我认为最好的办法是用'()替换作者对nil的使用.

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