2010-04-29 60 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