有人能告诉我在 MIT-Scheme 中“空值表示”是什么吗?在 SICP 书中,应该是“nil”,但它不起作用。 谢谢。
有人能告诉我在 MIT-Scheme 中“空值表示”是什么吗?在 SICP 书中,应该是“nil”,但它不起作用。 谢谢。
'()
应该可以工作。在Scheme中,nil是空列表,因此引用一个空列表会得到nil。
原始链接(已失效):http://wiki.wordaligned.org/sicp/published/FrequentlyAskedQuestions
简短的答案是:nil不再是Scheme的一部分,请使用 '()
代替。长答案如下...
第2章的早期示例使用nil
作为列表终止符,但是当使用(例如)MIT Scheme 运行这些示例时,你会得到以下错误:
;Unbound variable: nil
同样地,在某些实现中,使用()
或null
代替nil
可能有效,但两者都不具备可移植性。巫师之书在这个脚注中解决了这个问题。MIT/GNU Scheme
微代码15.3版本,()
和'()
都能工作。正如你所说,nil
和null
无法工作。1 ]=> ()
;Value: ()
1 ]=> '()
;Value: ()
1 ]=> (cons 1 ())
;Value 2: (1)
1 ]=> (cons 1 '())
;Value 3: (1)
(list) '() 和 () 可以表示空值。例如,
(define (transpose mat) (accumulate-n cons () mat))
或者使用'() 或 (list ) 替换 ()。
()
或'nil
,显然两者都不能用来表示空列表。而且SICP直到中途才介绍引号,这可能也没有帮助...谢谢! - Sophia Gold