2013-03-26 8 views
7

私は言語を学び始めているCommon Lisp初心者です。私の質問です:いくつかの関数は、さまざまな方法で述語構文を使用して見てきました。例えば(これを見てください)、streampとpathnamepがありますが、input-stream-pとoutput-stream-pもあります。 * pまたは* -pを使うためにすべての関数が標準化されていないのはなぜですか?これは単なる歴史的な人工物だろうか?述語の命名規則が機能によって異なるのはなぜですか?

+1

ほとんどの歴史的な - Common Lispは、大部分のLisp実装からのすべての単純な組合として大部分が終了しました。ほとんどすべては、既存のコードが、本当によく合います。 –

+1

これは実際には「構文」ではありません。「命名規則」 – GoZoner

+1

@GoZoner良い点が修正されました。 –

答えて

11

ルールはマルチワード述語名は-Pで終わるながら1ワードの述語名は、ちょうどPに終わるということです。前者の理由は主に歴史的です。後者の理由は、input-streampのような名前は、質問されている質問が「この入力はストリームですか?」またはそのようなものであると誤って示唆しています。

+1

私は 'predicatep'と' complex-predicate-p'(あるいは 'simplep'と' complex-predicate-p')を原則としています。 – Vatine

+0

場合によっては、複数単語の述語にハイフンを追加しないこともあります(例: 'string-lessp')。 [Common Lisp the Language、2nd Edition](http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node69.html)を参照してください。 – coredump

+0

また、 'atom'があります:)。[Common Lisp the Language、2nd Edition](http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node73.html) –

関連する問題