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

相關文章
相關標籤/搜索