2010-12-20 33 views
5

是否有任何方法將函數應用於元組成員作爲函數參數?或者,如果沒有,我可以用任意數量的參數創建一個函數,並且在它的主體中將一些另外的函數應用到「尾部」,因爲它是它的參數?在OCaml中展開元組

回答

7

在一般情況下,沒有。對於2個參數的情況,您可以使用Batteries extensions to Pervasives中的curryuncurry函數。

可能可以煮東西了與Obj模塊,像printf的內部做的,但我會留遠遠離那。困難在於類型系統不能給你一種表達廣義的curryuncurry函數的類型。類型系統不允許您在元組的長度上「計算」 - 2元組是2元組,並且您無法用其他組件表示(a*b*c)實際上是(a*b)printf得到編譯器的特別支持,使得類型能夠正常工作,並且它導致函數類型成爲格式類型的一部分(所以類似的解決方案不適用於元組)。

7

該語言本身不允許你在任意大小的元組上定義一個函數。

然而,通過遵循this folding technique(它在SML中描述,但在OCaml中同樣適用),可以使用任意數量的參數定義函數。