在Common Lisp中,null和nil的确切区别是什么? [英] What is the exact difference between NULL and NIL in Common Lisp?
本文介绍了在Common Lisp中,null和nil的确切区别是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
据我所知,nil是许多东西的符号:空列表或布尔值false。到目前为止还不错,但是为什么输出中有时会显示NULL?
clisp> (type-of NIL)
NULL
clisp> (type-of t)
BOOLEAN
clisp> (type-of (not t))
NULL
clisp> NIL
NIL
clisp> (eq NULL NIL)
ERROR..
因此NULL不是已定义的符号,因为"BASIC-STRING-6"
也不是。但我对NULL这个术语有点困惑,因为无论是否否定,布尔值都应该保持为布尔值。
推荐答案
您可能会觉得奇怪,T
是布尔值,而NIL
不是,原因是NIL
有几个帽子。它是空列表,它是符号零,它是布尔值FALSE。因此,它有时出现在不适合布尔类型值的上下文中,因此从类型安全的角度来看,布尔类型不适合它。有点类似,在方案中布尔值False不同于空列表。
NULL作为NIL
的type
给出。
NIL
是Common Lisp中表示NULL的符号。它也是空列表()
的表示形式。#'NULL
是检查变量是否为空的函数(即eq
NIL
)。
(defconstant null nil)
(type-of NULL) ; ==> NULL
NULL ; ==> NIL
(eq NULL NIL) ; ==> T
这篇关于在Common Lisp中,null和nil的确切区别是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文