Function OCaml:在没有定义值的情况下进行货币化

Function OCaml:在没有定义值的情况下进行货币化,function,ocaml,return,currying,Function,Ocaml,Return,Currying,我有两个函数f和g,我试图返回f(g(x)),但我不知道x的值,我也不知道该怎么做 一个更具体的例子:如果我有函数f=x+1和g=x*2,并且我试图返回f(g(x))我应该得到一个等于(x*2)+1的函数,看起来你是对的,f(g(x))应该可以正常工作。我不知道为什么在那里有一个return关键字(它不是ocaml中的关键字)。这是一个正确的版本 let compose f g x = f (g x) 这个的类型定义是 val compose : ('b -> 'c) -> ('a

我有两个函数f和g,我试图
返回f(g(x))
,但我不知道x的值,我也不知道该怎么做


一个更具体的例子:如果我有函数
f=x+1
g=x*2
,并且我试图
返回f(g(x))
我应该得到一个等于
(x*2)+1
的函数,看起来你是对的,
f(g(x))
应该可以正常工作。我不知道为什么在那里有一个
return
关键字(它不是ocaml中的关键字)。这是一个正确的版本

let compose f g x = f (g x)
这个的类型定义是

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

非常感谢你的帮助!但我还有一个问题,为什么我们可以在不为x指定值的情况下调用compose?函数返回函数。霍夫!也许在编写时发生的事情更清楚,但是这些程序是完全一样的(一个是语法糖,另一个是语法糖,我不确定是哪个)。调用
composefg
不需要
x
的值,因为
composefg
不使用
x
:它生成并返回一个函数。@尼古丁;是的,它返回一个接受新定义类型的函数。事实上,这就是咖喱的意义所在。例如,x_plus_x_plus_1是(int->int)的函数。
let x_plus_x_plus_1 = compose (fun x -> x + 1) (fun x -> x * 2)