在Common Lisp中,null和nil的确切区别是什么? [英] What is the exact difference between NULL and NIL in Common Lisp?

查看:32
本文介绍了在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作为NILtype给出。

NIL是Common Lisp中表示NULL的符号。它也是空列表()的表示形式。#'NULL是检查变量是否为空的函数(即eqNIL)。

如果希望使用NULL而不是nil,则可以定义NULL。(这在实践中可能是个糟糕的主意。)

(defconstant null nil)
(type-of NULL) ; ==> NULL
NULL           ; ==> NIL
(eq NULL NIL)  ; ==> T

这篇关于在Common Lisp中,null和nil的确切区别是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆