13

時々、次の式を含むコードが表示されます。

example = example' []

または、これらの機能の違いは何ですか?

foldl
foldl'
4

4 に答える 4

23

'他と同じように、単に別の識別子文字です。foldl';とは完全に別の関数foldlです。と呼ぶこともできますstrictFold。これは、次のように密接に関連しているため、このように呼ばれfoldlます。これfoldlは、アキュムレータがすべてのステップで評価される場所であり、大きなサンクが蓄積しないようにします。たとえばfoldl (+) 0、大きなリストのスタックはオーバーフローしますが、オーバーフローしfoldl' (+) 0ません。

一般に、の接尾辞は'次の3つのうちの1つを意味しfoo'ます。を定義する目的で作成されたヘルパー定義foo、の変更バージョンfoo(つまりstate、、、state'およびstate''は初期状態と2つの更新バージョンである可能性があります)、または厳密なのバージョンfoo

于 2012-04-28T11:54:45.917 に答える
4

アポストロフィは有効な識別子文字であるため、少なくともそのコンテキストでは何もありません(詳細については、この回答を参照してください)。

foldl'標準ライブラリでは、 (strict) や(lazy)などのように、特定の関数の厳密なバージョンが標準の (lazy) バージョンとアポストロフィによって区別されるのは、ちょっとした慣習foldlです。これは、アポストロフィが特別であることとは関係ありませんが、単なる規則です。

于 2012-04-28T11:58:09.143 に答える
2

Haskellでは、識別子を区別するのは単なる別の文字であり、識別子はその後呼び出されますが、数学で使用されるfold primeのと同じ方法で一般的に使用されます。

于 2012-04-28T11:56:20.913 に答える
0

なんらかのメンバーシップ テスト (または他の述語) を含むハック モジュール (どのモジュールかは忘れました) があります。テスト関数は「is」と呼ばれます。

foo x | x `is` whatever = ...

便宜上、関数のブール否定も提供されます。

bar x | x `isn't` whatever = ...

最初に見たときは面白いと思いました。アポストロフィは、識別子の単なる別の文字です。

于 2012-05-01T02:44:06.373 に答える