2010-04-29 47 views
4

我有兩個函數f和g,我試圖return f(g(x))但我不知道x的價值,我不知道如何去做這件事。OCaml:沒有定義值的捲曲

更具體的例子:如果我有功能f = x + 1g = x * 2和我試圖return f(g(x))我應該等於(x*2) + 1

回答

5

看起來你是不是正確的,f(g(x))應該正常工作的功能。我不知道爲什麼你有一個return關鍵字(它不是ocaml中的關鍵字)。這裏是一個正確的版本,

let compose f g x = f (g x) 

這種類型定義是,

val compose : ('b -> 'c) -> ('a -> 'b) -> 'a -> 'c = <fun> 

每個, '一個,' B「,c是抽象類型;我們不在乎它們是什麼,它們只需要在定義中保持一致(因此,g的域必須在f的範圍內)。

let x_plus_x_plus_1 = compose (fun x -> x + 1) (fun x -> x * 2) 
+0

非常感謝您的幫助!但是我還有一個問題,那就是我們被允許在沒有爲x指定一個值的情況下調用compose? – nicotine 2010-04-29 05:59:38

+0

函數返回函數。 HOF! – ygrek 2010-04-29 06:54:44

+1

也許正在發生的事情在寫出來的時候會更清晰一些,但是這些程序是完全一樣的東西(一個是另一個的語法糖,我不確定是哪一個)。調用'compose f g'不需要'x'的值,因爲'compose f g'不使用'x':它構建並返回一個函數。 – 2010-04-29 08:26:34