プログラミング言語SML#解説 4.0.0版
7.9 関数適用の文法
powerUncurryは,複数引数を取るC言語の関数と同様です. ML言語の強みは,これ以外に,powerCurryにように 引数を順番に受け取る関数が書けることです. これを正確に理解するために,ここでMLの関数式の構文を復習しておき ましょう. 数学などの式では関数の利用(適用)は,関数の引数を括弧でかこみ のように記述しますが,MLなどラムダ計算の考え方を基礎とした関数型言 語では,単に関数と引数を並べてf xのように書きます.
式の集合をで表すと,定数,変数,関数適用を含むMLの構文は一 部は,以下のような文法となります.
この構文規則のみでは関数適用式が続いた場合,その適用順番をきめる ことができません. 例えば,式に割り算の構文と足し算 を導入した場合を考えてみましょう. この文法は,60 / 6 / 2 + 1のような式をゆるしますが,どの割り算 が先に行われるのかで2通りの解釈が可能です. この算術式では,通常左から括弧があるとみなし,((60 / 10) / 2) + 1 と解釈されます. このような解釈を,割り算の構文は「左結合」し,かつ足し算の構文より「結 合力が強い」,と言います.
ラムダ計算を下敷きとした関数適用をもつ言語では,関数適用式に関し て以下の重要な約束があります.
関数適用式は左結合し,その結合力は最も強い
関数式は左結合すると約束されているので,powerCurry 2 3は ((powerCurry 2) 3)と解釈されます. 一般に,e1 e2 e3 enと書いた式は ( ((e1 e2) e3) en)とみなされます.