如果 Common Lisp 中的 atom 和 null 接收一个列表作为参数,它们有什么实际区别吗?
Is there any pratical difference for atom and null in Common Lisp if they receive a list as an argument?
我正在使用 SBCL、Emacs 和 Slime。根据Symbolic Computation: A gentle introduction to Common Lisp一书,atom
的定义是:
The ATOM predicate returns T if its input is anything other than a cons
cell.
另一方面:
The NULL predicate returns T if its input is NIL. Its behavior is the same
as the NOT predicate.
使用 REPL 并以 仅列出 作为参数,我只能想到他们检索相同结果的示例:
CL-USER> (atom (cons 1 nil))
NIL
CL-USER> (null (cons 1 nil))
NIL
CL-USER> (atom (cons 1 (cons 2 nil)))
NIL
CL-USER> (null (cons 1 (cons 2 nil)))
NIL
CL-USER> (atom (cons 1 2))
NIL
CL-USER> (null (cons 1 2))
NIL
CL-USER> (atom '())
T
CL-USER> (null '())
T
CL-USER> (null nil) ;; just changing notation from previous
T
CL-USER> (atom nil) ;; just changing notation from previous
T
CL-USER> (atom '(1 . 2)) ;; just changing notation from previous
NIL
CL-USER> (null '(1 . 2)) ;; just changing notation from previous
NIL
CL-USER> (atom '(1 2)) ;; just changing notation from previous
NIL
CL-USER> (null '(1 2)) ;; just changing notation from previous
NIL
CL-USER> (atom '(1)) ;; just changing notation from previous
NIL
CL-USER> (null '(1)) ;; just changing notation from previous
NIL
根据上面的定义和示例,并考虑到 非空列表是缺点单元格,我得出的结论是:
if the argument is a list, null
and atom
do have the same behavior as predicates.
这个说法有反例吗?我错过了什么?正确吗?
列表是:
- 空列表,
()
aka nil
,这不是缺点;
- 或任何对象和列表的缺点。
null
return仅对 nil
为真; atom
return对于任何不是缺点的对象都是正确的。
因此,当仅限于列表时、null
和 atom
return 只对 nil
有效,是唯一既是列表又不是缺点的对象,对于列表,是等价的谓词。
我正在使用 SBCL、Emacs 和 Slime。根据Symbolic Computation: A gentle introduction to Common Lisp一书,atom
的定义是:
The ATOM predicate returns T if its input is anything other than a cons cell.
另一方面:
The NULL predicate returns T if its input is NIL. Its behavior is the same as the NOT predicate.
使用 REPL 并以 仅列出 作为参数,我只能想到他们检索相同结果的示例:
CL-USER> (atom (cons 1 nil))
NIL
CL-USER> (null (cons 1 nil))
NIL
CL-USER> (atom (cons 1 (cons 2 nil)))
NIL
CL-USER> (null (cons 1 (cons 2 nil)))
NIL
CL-USER> (atom (cons 1 2))
NIL
CL-USER> (null (cons 1 2))
NIL
CL-USER> (atom '())
T
CL-USER> (null '())
T
CL-USER> (null nil) ;; just changing notation from previous
T
CL-USER> (atom nil) ;; just changing notation from previous
T
CL-USER> (atom '(1 . 2)) ;; just changing notation from previous
NIL
CL-USER> (null '(1 . 2)) ;; just changing notation from previous
NIL
CL-USER> (atom '(1 2)) ;; just changing notation from previous
NIL
CL-USER> (null '(1 2)) ;; just changing notation from previous
NIL
CL-USER> (atom '(1)) ;; just changing notation from previous
NIL
CL-USER> (null '(1)) ;; just changing notation from previous
NIL
根据上面的定义和示例,并考虑到 非空列表是缺点单元格,我得出的结论是:
if the argument is a list,
null
andatom
do have the same behavior as predicates.
这个说法有反例吗?我错过了什么?正确吗?
列表是:
- 空列表,
()
akanil
,这不是缺点; - 或任何对象和列表的缺点。
null
return仅对 nil
为真; atom
return对于任何不是缺点的对象都是正确的。
因此,当仅限于列表时、null
和 atom
return 只对 nil
有效,是唯一既是列表又不是缺点的对象,对于列表,是等价的谓词。