2015-10-13 62 views
1

我有一個任務來定義兩個函數,一個與類型:ocaml的定義函數「一 - >」 B

('a-> 'b) -> ('c -> 'a) -> 'c -> 'b 

和第二個只

'a -> 'b 

,而第一功能是組合物我這樣做了:

let compose f g arg = f(g(arg)) 

我卡在第二個。任何人都可以讓我正確回答?我做了這一個:

let a x = List.hd [] 

但我很肯定有很多簡單的例子。

回答

4

第一個功能不討好,它的功能組成。柯里裏類型爲('a * 'b -> 'c) -> 'a -> 'b -> 'c

您的'a -> 'b的解決方案是相當不錯的。請注意0​​引發異常。因此,另一種實現方式是:

let f x = raise Not_found 

要認識到的一點是,沒有「好」功能,都不​​可能給定類型。它會在哪裏得到'b型的實際價值迴歸?它必須是一個可以有任何類型的價值。

+0

編輯我的文章,以糾正'currying'的錯誤。感謝您的回答。 – Tomasz

+1

'let rec f x = f x' :-) – melpomene

+0

@melpomene謝謝,那看起來更棒 – Tomasz

相關問題