为什么不同函数的谓词命名惯例不同?

9

我是一个刚开始学习Common Lisp的新手。我的问题是:我看到一些函数使用谓词语法的方式不同。例如(刚查了一下),有streamp和pathnamep,但也有input-stream-p和output-stream-p。为什么不所有函数都标准化使用* p或*-p?这可能只是历史遗留问题吗?


1
大多数是历史性的--Common Lisp主要是每个主要Lisp实现中的所有内容的简单联合,几乎全部混在一起,更关注确保现有代码继续工作,而不是创建一个真正完美契合的语言。 - Jerry Coffin
1
这实际上不是“语法” - 它是“命名约定”。 - GoZoner
1
@GoZoner 好的,说得对,已经修复。 - Daniel Neel
1个回答

12
规则是:单词谓词名称以 P 结尾,而多个单词的谓词名称以 -P 结尾。前者的原因大多是历史因素;后者的原因是像 input-streamp 这样的名称会错误地暗示所询问的问题是“这个输入是否为流”或类似问题。

1
通常我会说 predicatepcomplex-predicate-p(或者,作为替代,simplepcomplex-predicate-p)。 - Vatine
1
请注意,在某些情况下,您不需要为多个单词的谓词添加连字符(例如string-lessp)。请参阅《通用Lisp语言第二版》(http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node69.html)。 - coredump
还有atom :)。《通用Lisp语言第二版》 - sçuçu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接