flip
最近、ハッキングが発生したり発生したりするコードが多すぎたため、パラメーターの順序を変更するためにコードを 2 回リファクタリングしました\x -> foo bar x 42
。
関数シグネチャを設計するとき、カリー化を最大限に活用するのに役立つ原則は何ですか?
flip
最近、ハッキングが発生したり発生したりするコードが多すぎたため、パラメーターの順序を変更するためにコードを 2 回リファクタリングしました\x -> foo bar x 42
。
関数シグネチャを設計するとき、カリー化を最大限に活用するのに役立つ原則は何ですか?
カリー化と部分適用を簡単にサポートする言語については、説得力のある一連の議論があります。もともとは Chris Okasaki によるものです。
なんで?その後、データに対する操作を適切に構成できます。例insert 1 $ insert 2 $ insert 3 $ s
。これは、関数 on state にも役立ちます。
「コンテナ」などの標準ライブラリは、この規則に従います。
データ構造を最初に配置するために代替引数が与えられることがあります。そのため、データ構造を閉じて、静的構造 (ルックアップなど) に対してもう少し簡潔な関数を生成できます。ただし、特に括弧で囲まれたコードの方が強くなるため、これはあまり有利ではないというのが一般的なコンセンサスのようです。
再帰関数の場合、最も変化する引数 (アキュムレータなど) を最後の引数として置き、変化が最も少ない引数 (関数の引数など) を最初に置くのが一般的です。これは、データ構造の最後のスタイルでうまく構成されます。
岡崎ビューの概要は、彼の Edison ライブラリ(これもまた別のデータ構造ライブラリ) に記載されています。
再利用する可能性が最も高い引数を最初に配置します。関数の引数は、この好例です。map f
多くの異なる関数を同じリストにマップしたい場合よりも、2 つの異なるリストを使用したい場合の方がはるかに多いでしょう。
私はあなたがしたことをする傾向があり、良いと思われる注文を選び、別の注文の方が良いことが判明した場合はリファクタリングします。順序は、関数を(当然のことながら)どのように使用するかによって大きく異なります。