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 from Muenster Curry Compiler。ここ:

choose :: [a] -> a

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

ヘルパー再帰関数の"p" サフィックスchoosepは既知の命名規則ですか? おそらく、関数型プログラミングの伝統 (Haskell) または論理型プログラミング (Prolog?) から来ているのでしょう。それはどういう意味ですか?

(この関数は、Why is the non-deterministic choice function in Curry's std lib not directly definedly but rather with a helper 2-argument function?で検討されました。)

4

4 に答える 4

2

この場合、私はp「プライム」の略だと思います。ヘルパーchoose'またはを呼び出す代わりchooseprimeに、 を使用しますchoosep

于 2011-03-11T23:05:58.153 に答える
2

「プライム」の略だと思います-'識別子を許可するOCamlでは、ヘルパー関数は頻繁に名前が付けられfoo'ます。大まかに言うと、これ (および事後ヘルパー定義での「where」の使用) は、関数型プログラムを純粋な数学での同等の定義に似せたいという欲求から生じていると思います。

于 2011-03-11T23:08:42.643 に答える
1

この文脈では、他の人が指摘したように、おそらく当てはまりませんが、最後の 'p' を使用して述語を表すという一般的な Lisp 規則があります。専門用語 p-conventionを参照してください。

個人的には、述語を '?' で終わらせるという Ruby の規則を好みます。

于 2011-03-11T23:15:46.917 に答える
0

P は「述語」を表します。「真」または「偽」を返すもの。

于 2011-03-11T23:04:59.627 に答える