lisp中的nil

ANSI Common Lisp 第二章 课后习题 7.只使用本章所介绍的操做符,定义一个函数,它接受一个列表做为实参,若是有一个元素是列表时,就返回真。函数

1 (defun have-list (lst)
2     (if (null lst)
3         nil
4         (do ((i lst (setf i (cdr i))) (exis nil))
5             ((null i) exis)
6             (setf exis (and (listp (car i)) (not (null i)))))))

测试以下测试

当看到(have-list '(nil))的返回值,个人第一反应是代码有误,当我仔细检查过代码逻辑之后,才发现真正的问题是我对nil这个对象理解有误.spa

在 Common Lisp 里有两种方法来表示空列表。你能够用一对不包括任何东西的括号来表示,或用符号 nil 来表示空表。code

(typep nil 'list)对象

因此把上面有疑问的输入改为(have-list '(())),返回值也是T,就能够理解了.blog

相关文章
相关标签/搜索