3

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

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

在“标准库”中的Curry 编程语言中——/usr/lib/curry-0.9.11/Success.curry 来自Muenster Curry Compiler。这里:

choose :: [a] -> a

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

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

(这个函数在为什么 Curry 的标准库中的非确定性选择函数没有直接定义而是使用辅助 2-argument 函数?。)

4

4 回答 4

2

在这种情况下,我相信p代表“素数”。choose'他们没有调用助手或,而是chooseprime使用choosep.

于 2011-03-11T23:05:58.153 回答
2

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

于 2011-03-11T23:08:42.643 回答
1

在这种情况下,正如其他人所指出的那样,它可能不适用,但有一个流行的 Lisp 约定,即使用结尾的“p”来表示谓词。见行话 p-convention

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

于 2011-03-11T23:15:46.917 回答
0

P 代表“谓词”。返回“真”或“假”的事物。

于 2011-03-11T23:04:59.627 回答