“foop”:命名惯例?它是“foo”的辅助递归函数;后缀“p”是什么意思?

时间:2011-03-11 22:59:52

标签: recursion functional-programming naming-conventions curry helper-functions

我遇到了以下代码片段(函数定义):

choose (x:xs) = choosep x xs
  where choosep x [] = x
        choosep x (_:_) = x
        choosep _ (x:xs) = choosep x xs

Curry programming language中的“标准库” - / usr / lib / curry-0.9.11 / Success.curry来自Muenster Curry Compiler。这里:

choose :: [a] -> a

choosep :: a -> [a] -> a -- BTW, not a _p_redicate

帮助递归函数 choosep “p”后缀是一个已知的命名约定吗?也许它来自函数式编程传统(Haskell)或逻辑编程(Prolog?)。那是什么意思呢?

Why is the non-deterministic choice function in Curry's std lib not defined straightforwardly but rather with a helper 2-argument function?中考虑了此功能。)

4 个答案:

答案 0 :(得分:2)

在这种情况下,我相信p代表“素数”。他们使用choose'而不是调用助手chooseprimechoosep

答案 1 :(得分:2)

我认为它代表'prime' - 在OCaml中,它允许标识符中有',辅助函数通常被命名为foo'。在高层次上,我认为这(以及使用'where'作为事后帮助定义)源于希望允许函数程序在纯数学中类似于它们的等价定义。

答案 2 :(得分:1)

在这种情况下,正如其他人所指出的那样,它可能不适用,但有一种流行的Lisp惯例,即使用最终的'p'来表示谓词。请参阅jargon p-convention

我个人更喜欢使用'?'来结束谓词的Ruby约定。

答案 3 :(得分:0)

P代表'谓词'。返回'true'或'false'的东西。