Molte comunità hanno convenzioni di denominazione per fare sporgere i predicati. In Java, hanno come prefisso has
o is
( isEven
), in Ruby e Scheme, sono suffissi con ?
( even?
) e in alcuni altri linguaggi, sono suffissi con p
o _p
( evenp
, even_p
). A prima vista, ha un odore un po '"cattivo ungherese", ma in realtà trovo che rende il codice più scorrevole.
Haskell non usa alcun marcatore, si fidano dei tipi (tutto ciò che restituisce un Bool
è un predicato, ad esempio even :: Integral a ⇒ a → Bool
).
Se la tua comunità utilizza e comprende questa convenzione, dovresti seguirla.
I predicati di denominazione che terminano con p
sono in effetti piuttosto comuni, ma ciò non ha nulla a che vedere con l'aspetto della lettera p
, è semplicemente un'abbreviazione di "predicato". Ecco un esempio di alcune funzioni della specifica ANSI CommonLISP:
-
adjustable-array-p
-
alpha-char-p
-
alphanumericp
-
array-has-fill-pointer-p
-
array-in-bounds-p
-
arrayp
-
bit-vector-p
-
both-case-p
-
boundp
-
char-greaterp
-
char-lessp
-
char-not-greaterp
-
char-not-lessp
-
characterp
-
compiled-function-p
-
complexp
-
consp
-
constantp
-
digit-char-p
-
endp
-
equalp
-
evenp
-
fboundp
-
floatp
-
functionp
-
graphic-char-p
-
hash-table-p
-
input-stream-p
-
integerp
-
interactive-stream-p
-
keywordp
-
listp
-
logbitp
-
lower-case-p
-
minusp
-
next-method-p
-
numberp
-
oddp
-
open-stream-p
-
output-stream-p
-
packagep
-
pathname-match-p
-
pathnamep
-
plusp
-
random-state-p
-
rationalp
-
readtablep
-
realp
-
simple-bit-vector-p
-
simple-string-p
-
simple-vector-p
-
slot-boundp
-
slot-exists-p
-
special-operator-p
-
standard-char-p
-
streamp
-
string-greaterp
-
string-lessp
-
string-not-greaterp
-
string-not-lessp
-
stringp
-
subsetp
-
subtypep
-
symbolp
-
tailp
-
typep
-
upper-case-p
-
vectorp
-
wild-pathname-p
-
y-or-n-p
-
yes-or-no-p
-
zerop