首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mit-Scheme中的空值?

Mit-Scheme中的空值?
EN

Stack Overflow用户
提问于 2012-02-03 00:11:04
回答 4查看 13.8K关注 0票数 26

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-03 00:17:52

'()应该可以工作。基本上,方案中的nil是一个空列表,所以引用一个空列表会得到nil。

票数 25
EN

Stack Overflow用户

发布于 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作为列表终止符,但当运行这些示例时使用(例如)麻省理工学院计划,你会得到:

代码语言:javascript
复制
;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输入到相关语言/实现中。

票数 11
EN

Stack Overflow用户

发布于 2014-10-11 23:33:22

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

代码语言:javascript
复制
1 ]=> ()

;Value: ()

1 ]=> '()

;Value: ()

1 ]=> (cons 1 ())

;Value 2: (1)

1 ]=> (cons 1 '())

;Value 3: (1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9115703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档