2015-08-14 18 views
1

我在計算如何將函數加括號(當在某些部分的周圍添加括號以使意思更清晰時是合法的)時遇到了一些困難。SML:嚴格的加括號功能類型的方法

例如,foldl被定義爲具有類型:現在

foldl : ('a * 'b -> 'b) -> b -> 'a list -> 'b 

,如果我看foldl的定義,我看到:在此基礎上

fun foldl g z [] = z 
    | foldl g z (x::L) = foldl g (g(x,z)) L; 

,我通常只是精神上地圖g('a * 'b -> 'b),z'b類型,並且模式匹配處理類型'a list的列表。最後,返回類型爲'b

不過,我想->正確的同夥,所以說「OK,加括號像這樣開始不會是最自然的:

foldl : ('a * 'b -> 'b) -> 'b -> ('a list -> 'b) 

有什麼不對這一思路/我是什麼誤解有關如何添加括號?

回答

4

有沒有錯,它只是多餘的。

('a * 'b -> 'b) -> 'b -> ('a list -> 'b)('a * 'b -> 'b) -> ('b -> ('a list -> 'b))('a * 'b -> 'b) -> 'b -> 'a list -> 'b都是等價因爲->是正確的聯想。所以我們通常使用最少的圓括號編寫版本(就像通常寫入3 - 2 - 1而不是等效的(3 - 2) - 1)。