2013-03-26 46 views
7

我是一位開始學習語言的Common Lisp新手。我的問題是:我已經看到幾個函數以不同的方式使用謂詞語法。例如(只是看這個),有streamp和pathnamep,但也有input-stream-p和output-stream-p。爲什麼不是所有的函數都使用* p或* -p標準化?這可能只是一個歷史神器嗎?爲什麼謂詞命名約定在不同函數之間有所不同?

+1

大部分歷史 - Common Lisp主要是作爲當時每個主要Lisp實現的一切簡單聯合而結束的,幾乎所有內容都引入了更多的興趣,以確保現有代碼將繼續發揮作用,而不是創建一種語言很好地融合在一起。 – 2013-03-26 15:30:35

+1

這實際上不是'語法' - 它是'命名約定' – GoZoner 2013-03-26 20:45:52

+1

@GoZoner好點,固定的。 – 2013-03-26 21:12:39

回答

11

的規則是一個字謂詞名以剛P,而多字謂詞的名字在-P結束。前者的原因大多是歷史的;後者的原因是像input-streamp這樣的名稱會錯誤地暗示被問到的問題是「這個輸入流是什麼?」或類似的東西。

+1

我傾向於說'predicatep'和'complex-predicate-p'(或者,或者'simplep'和'complex-predicate-p')。 – Vatine 2013-03-27 14:25:39

+0

還要注意,在某些情況下,不要爲多詞謂詞添加連字符(例如'string-lessp')。參見[Common Lisp the Language,2nd Edition](http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node69.html)。 – coredump 2013-12-07 15:48:45

+0

還有'atom' :)。[Common Lisp the Language,2nd Edition](http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node73.html) – 2017-10-31 21:06:28

相關問題