伯克利的“CS 61A Lecture 8: UI Recursion and Iteration III”说 无效的?检查列表是否为空并且为空?检查列表是否为空或单词是否为空?讲师还接着说 (null?empty) 将返回 false。但 DrScheme 一点也不介意。
null 和 null 有什么区别?和空?在计划中?
没有区别(在我最喜欢的方言中——
empty?
不在标准中,而且我已经很久没有使用任何不同的方言了;)...! 引用PLT方案文档:
(null? v) → boolean?
v : any/c
Returns #t if v is the empty list, #f otherwise.
和
(empty? v) → boolean?
v : any/c
The same as (null? v).
R5RS 和 R6RS 都没有将
empty?
定义为谓词,并且都将 null?
定义如下:
如果
obj是空列表,则返回#t
,否则返回。#f
你可以 (定义空?null?) (定义空'())
空?特定于 PLT 方案;它和 null 一样吗?.
当CS61A使用Scheme时,它是为了与伯克利定制版本的Stk Scheme搭配使用。它包括SimplyScheme一书中使用的非标准函数,这就是
empty?
的来源。它在 SS 序言中定义为:
(define empty?
(let ((null? null?) (string? string?) (string=? string=?))
(lambda (x)
(or (null? x)
(and (string? x) (string=? x ""))))))
也就是说;如果给定空列表或空字符串,
empty?
返回 true,否则返回 false。 null?
,当然,只有在给定空列表时才返回 true。其他Scheme实现可能会定义empty?
,但除非它们以与SimplyScheme兼容的方式这样做,否则在使用它们运行此类的程序和问题时可能会得到意想不到的结果。