時々、次の式を含むコードが表示されます。
example = example' []
または、これらの機能の違いは何ですか?
foldl
foldl'
'
他と同じように、単に別の識別子文字です。foldl'
;とは完全に別の関数foldl
です。と呼ぶこともできますstrictFold
。これは、次のように密接に関連しているため、このように呼ばれfoldl
ます。これfoldl
は、アキュムレータがすべてのステップで評価される場所であり、大きなサンクが蓄積しないようにします。たとえばfoldl (+) 0
、大きなリストのスタックはオーバーフローしますが、オーバーフローしfoldl' (+) 0
ません。
一般に、の接尾辞は'
次の3つのうちの1つを意味しfoo'
ます。を定義する目的で作成されたヘルパー定義foo
、の変更バージョンfoo
(つまりstate
、、、state'
およびstate''
は初期状態と2つの更新バージョンである可能性があります)、または厳密なのバージョンfoo
。
アポストロフィは有効な識別子文字であるため、少なくともそのコンテキストでは何もありません(詳細については、この回答を参照してください)。
foldl'
標準ライブラリでは、 (strict) や(lazy)などのように、特定の関数の厳密なバージョンが標準の (lazy) バージョンとアポストロフィによって区別されるのは、ちょっとした慣習foldl
です。これは、アポストロフィが特別であることとは関係ありませんが、単なる規則です。
Haskellでは、識別子を区別するのは単なる別の文字であり、識別子はその後呼び出されますが、数学で使用されるfold prime
のと同じ方法で一般的に使用されます。
なんらかのメンバーシップ テスト (または他の述語) を含むハック モジュール (どのモジュールかは忘れました) があります。テスト関数は「is」と呼ばれます。
foo x | x `is` whatever = ...
便宜上、関数のブール否定も提供されます。
bar x | x `isn't` whatever = ...
最初に見たときは面白いと思いました。アポストロフィは、識別子の単なる別の文字です。