Adolph两边

 

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这个对象理解有误.

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

(typep nil 'list)

所以把上面有疑问的输入改成(have-list '(())),返回值也是T,就可以理解了.

posted on 2014-03-28 17:45  Adolph两边  阅读(353)  评论(0编辑  收藏  举报

导航