I've come across the following code snippet (a function definition):
choose (x:xs) = choosep x xs
where choosep x [] = x
choosep x (_:_) = x
choosep _ (x:xs) = choosep x xs
in Curry programming language in a "standard library"--/usr/lib/curry-0.9.11/Success.curry from Muenster Curry Compiler. Here:
choose :: [a] -> a
and
choosep :: a -> [a] -> a -- BTW, not a _p_redicate
Is the "p" suffix for the helper recursive function choosep
a known naming convention? Perhaps it comes from functional programming开发者_StackOverflow tradition (Haskell) or logical programming (Prolog?). What does it mean then?
(This function was considered in Why is the non-deterministic choice function in Curry's std lib not defined straightforwardly but rather with a helper 2-argument function?.)
In this case, I believe p
stands for "prime". Rather than calling the helper choose'
or chooseprime
, they use choosep
.
I think it stands for 'prime' -- in OCaml, which allows '
in identifiers, helper functions are frequently named foo'
. At a high level, I think this (and the use of 'where' for a post-hoc helper definition) stems from the desire to allow functional programs to resemble their equivalent definitions in pure math.
In this context, as others have noted, it probably doesn't apply, but there is a popular Lisp convention of using a final 'p' to denote a predicate. See jargon p-convention.
I personally prefer the Ruby convention of ending a predicate with a '?'.
P stands for 'predicate'. A thing that returns 'true' or 'false'.
精彩评论