谁能告诉我mit-scheme中的空值表示是什么?在SICP书中,它应该是"nil“,但它不起作用。谢谢。
发布于 2012-02-03 00:17:52
'()应该可以工作。基本上,方案中的nil是一个空列表,所以引用一个空列表会得到nil。
发布于 2012-03-20 19:51:20
这就是历史。访问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作为列表终止符,但当运行这些示例时使用(例如)麻省理工学院计划,你会得到:
;Unbound variable: nil类似地,使用()或null代替nil在某些实现上也可以工作,但两者都不能移植。向导书在此脚注中解决了此问题
值得注意的是,Lisp方言标准化中有多少精力被浪费在了那些无关紧要的争论中: nil应该是一个普通的名字吗?nil的值应该是一个符号吗?它应该是一个列表吗?它应该是一对吗?在Scheme中,nil是一个普通的名称,我们在本节中使用它作为一个变量,它的值是列表结束标记(就像true是一个值为true的普通变量一样)。Lisp的其他方言,包括Common Lisp,将nil视为特殊符号。这本书的作者,已经忍受了太多的语言标准化之争,希望避免整个问题。一旦我们在2.3节引入了引用,我们将把空列表表示为‘(),并完全省略变量nil。
由于本文的编写,nil已经从Scheme标准中删除了-但底线是: use‘(),而不是nil。在一封发给accu sicp列表的电子邮件中,Mike指出:
这个nil/null/'()是件麻烦的事情。Scheme48和scm没有定义null,而guile将其定义为类似于普通lisp的null的过程(使用其nil,其行为类似于cl的nil,这本身与‘()-maybe有所不同这与fsf计划在guile中重新执行emacs有关)。我认为最好的办法是将作者对nil的使用替换为‘()。
只需稍微清理一下排版,就可以更好地匹配Markdown和常见的ASCII输入到相关语言/实现中。
发布于 2014-10-11 23:33:22
我用MIT/GNU Scheme microcode 15.3,()和'()都行。(正如您所说,nil和null不起作用)。
1 ]=> ()
;Value: ()
1 ]=> '()
;Value: ()
1 ]=> (cons 1 ())
;Value 2: (1)
1 ]=> (cons 1 '())
;Value 3: (1)https://stackoverflow.com/questions/9115703
复制相似问题