より数学的な方法のようです
関数型言語は、ラムダ計算に触発されています。このフィールドでは、括弧は関数の適用には使用されません。
また、後者のスタイルは、括弧がない場合よりもはるかに明確で読みやすいと思います。
読みやすさは見る人の目にあります。あなたはそれを読むことに慣れていません。数学演算子に少し似ています。結合性を理解していれば、表現の構造を明確にするために必要な括弧は数個だけです。多くの場合、それらは必要ありません。
カリー化もこの規則を使用する正当な理由です。haskellでは、次を定義できます。
add :: Int -> Int -> Int
add x y = x + y
x = add 5 6 -- x == 11
f = add 5
y = f 6 -- y == 11
z = ((add 5) 6) -- explicit parentheses; z == 11
かっこでは、2つの規則を使用できます:(f(5, 6)
カレーではない)またはf(5)(6)
(カレー)。haskell構文は、カリー化の概念に慣れるのに役立ちます。まだカリー化されていないバージョンを使用できますが、コンビネーターと一緒に使用する方が苦痛です
add' :: (Int, Int) -> Int
add' (x, y) = x + y
u = add'(5, 6) -- just like other languages
l = [1, 2, 3]
l1 = map (add 5) l -- [6, 7, 8]
l2 = map (\x -> add'(5, x)) l -- like other languages
2番目のバージョンでは、xを変数として登録する必要があり、部分式は整数を取り、それに5を追加する関数であることに注意してください。カリー化されたバージョンははるかに軽量ですが、多くの人がより読みやすいと考えています。
Haskellプログラムは、抽象化を定義および構成する手段として、部分アプリケーションとコンビネータを広範囲に使用しているため、これはおもちゃの例ではありません。優れた関数インターフェースは、パラメーターの順序がわかりやすいカリー化された使用法を提供するインターフェースです。
もう1つのポイント:パラメーターのない関数はで呼び出す必要がありf()
ます。haskellでは、不変の遅延評価値のみを操作するためf
、単にを記述し、必要なときにいくつかの計算を実行する必要がある値と見なします。評価には副作用がないため、パラメータなしの関数とその戻り値に異なる表記を使用しても意味がありません。
関数の適用には他の規則もあります。
- Lisp:(fx)-外部括弧付きのプレフィックス
- Forth:xf-後置