Scheme Mit方案中的空值?

Scheme Mit方案中的空值?,scheme,sicp,mit-scheme,Scheme,Sicp,Mit Scheme,有人能告诉我什么是mit方案中的空值表示吗?在SICP书中,它应该是“nil”,但它不起作用。 谢谢 ”()应该可以工作。基本上,scheme中的nil是空列表,因此引用空列表会得到nil。这就是历史。 拜访 原件(破损): 上述常见问题解答中的文本(如果互联网档案被破坏): 为什么“零”不起作用? 快速的答案是:nil不再是Scheme的一部分,请使用'()。答案很长 第2章中的早期示例使用nil作为列表终止符,但当这些示例使用(例如)MIT方案运行时,您会得到: ;Unbound vari

有人能告诉我什么是mit方案中的空值表示吗?在SICP书中,它应该是“nil”,但它不起作用。 谢谢

”()
应该可以工作。基本上,scheme中的nil是空列表,因此引用空列表会得到nil。

这就是历史。 拜访

原件(破损):


上述常见问题解答中的文本(如果互联网档案被破坏):

为什么“零”不起作用? 快速的答案是:nil不再是Scheme的一部分,请使用
'()
。答案很长

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

;Unbound variable: nil
类似地,使用
()
null
代替
nil
可能在某些实现中起作用,但两者都不可移植。向导书在本脚注中解决了这个问题

值得注意的是,在Lisp方言的标准化过程中,有多少精力被浪费在了毫无意义的争论中:nil应该是一个普通的名字吗?nil的值应该是一个符号吗?它应该是一个列表吗?应该是一双吗?在Scheme中,nil是一个普通名称,我们在本节中使用它作为一个变量,其值是列表末尾标记(正如true是一个具有true值的普通变量一样)。Lisp的其他方言,包括Common Lisp,将nil视为一种特殊符号。这本书的作者忍受了太多的语言标准化争论,希望避免整个问题。一旦我们在第2.3节中引入了引号,我们将把空列表表示为'(),并完全省略变量nil

自从写了这篇文章之后,nil已经从Scheme标准中删除,但底线是:使用'(),而不是nil。在致accu sicp列表的电子邮件中,Mike指出:

这是一件麻烦的事,这件事是零/零/'()的。方案48和 scm不定义null,guile将其定义为类似于 common lisp的null(与其行为类似于cl的nil的nil一起, 它本身与“()”不同-也许这与 随着fsf计划在guile重新进行emacs)。我认为最好的办法是 将作者对nil的使用替换为“()”

[只需稍加排版清理即可复制,以便更好地将标记和常用ASCII输入匹配到相关语言/实现中。]

(列表)'()和()可以表示空值。比如说,

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

或将()替换为“()”或(列表)

我使用
MIT/GNU方案微码15.3
()
'()
所有作品。(正如您所说,
nil
null
不起作用)

1]=>()
;值:()
1 ]=> '()
;值:()
1]=>(cons1())
;值2:(1)
1]=>(cons 1’())
;价值3:(1)

是的。谢谢它起作用了。我测试了(cons2(cons3(cons4()))给出的(234)。天哪,这个答案省去了我太多的烦恼。我能从任何方案文档中收集到的只是
()
'nil
,显然两者都不能用于表示空列表。而且SICP直到中途才引入报价可能也没什么帮助。。。非常感谢。