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