基本上,标题说明了一切:在Common Lisp中,为什么null
谓词称为null
。不是nullp
(符合其他谓词,例如evenp
或oddp
)?这有什么特别的原因吗?
答案 0 :(得分:8)
首先,null
不是唯一的。请参阅atom
。
其次,我认为这些谓词是基本的,因此非常古老。我不认为“与p结束”协议是从LISP的最初开始引入的。
关于这个主题的有趣信息:
按照惯例,谓词的名称通常以字母p结尾(代表'谓词')。 Common Lisp在连字符谓词的名称中使用统一约定。如果通过向现有名称(例如数据类型的名称)添加p来形成谓词的名称,则在最终p之前放置连字符,并且仅当现有名称中存在连字符时。例如,number会产生numberp,但是standard-char会产生标准char-p。另一方面,如果通过在现有谓词名称的前面添加前缀限定符来形成谓词的名称,则这两个名称用连字符连接,并且在最终p之前是否存在连字符。例如,谓词string-lessp在p之前没有连字符,因为它是lessp的字符串版本(已在Common Lisp中重命名的MacLisp函数)。名称string-less-p会错误地暗示它是一个谓词,用于测试一种称为无字符串的对象,名称stringlessp将意味着一个谓词,用于测试某些东西是否没有字符串(是“无字符串”的)!
来源:http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node69.html
答案 1 :(得分:5)
谓词NULL很老。它在Common Lisp中被称为NULL,希望鼓励将遗留Lisp代码转换为Common Lisp
天!它出现在1959年3月的版本中,可能更早,麦卡锡的原始备忘录(参见这里的pdf第3页:http://dspace.mit.edu/handle/1721.1/6096)作为三个基本谓词之一。
有趣的是,这是在引入汽车和cdr之前。引人入胜 - 列表中的备忘录元素用逗号分隔。