对OCaml的行为感到好奇

mea*_*ory 1 ocaml functional-programming

我有一个问题,为什么OCaml表现得有点不寻常.通过定义功能

let abs_diff x y = abs(x - y);;

我们val abs_diff : int -> int -> int = <fun>现在通过定义为

let abs_diff x y = fun x -> (fun y -> abs(x - y));;

val abs_diff : 'a -> 'b -> int -> int -> int = <fun>

现在使用另一个名为as的函数

let dist_from3 = abs_diff 3;;

第一个定义它完美地工作但是第二个定义它没有按预期工作.我们明白了

val dist_from3 : '_a -> int -> int -> int = <fun>

为什么它表现得那样,为什么这两个定义看起来相同的功能不同?

Jef*_*eld 5

在你的第二个定义中,你有两个不同的外观(绑定)xy.这就是结果中有四个参数的原因.这就是你想要的:

let abs_diff = fun x -> fun y -> abs (x - y)
Run Code Online (Sandbox Code Playgroud)

(在实际操作中,我有时会犯这个错误,特别是在使用function关键字时.)