对 OCaml 的行为感到好奇
Curious about behaving of OCaml
我有一个问题,为什么 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>
现在使用另一个名为
的函数
let dist_from3 = abs_diff 3;;
对于第一个定义,它工作得很好,但对于第二个定义,它不能按预期工作。我们知道它是
val dist_from3 : '_a -> int -> int -> int = <fun>
为什么会这样,为什么这两个乍看起来相同的函数的定义不同?
在您的第二个定义中,您有两个不同的外观(绑定)x
和 y
。这就是结果中有四个参数的原因。这就是你想要的:
let abs_diff = fun x -> fun y -> abs (x - y)
(FWIW 在实际实践中我有时会犯这个错误,尤其是在使用 function
关键字时。)
我有一个问题,为什么 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>
现在使用另一个名为
的函数let dist_from3 = abs_diff 3;;
对于第一个定义,它工作得很好,但对于第二个定义,它不能按预期工作。我们知道它是
val dist_from3 : '_a -> int -> int -> int = <fun>
为什么会这样,为什么这两个乍看起来相同的函数的定义不同?
在您的第二个定义中,您有两个不同的外观(绑定)x
和 y
。这就是结果中有四个参数的原因。这就是你想要的:
let abs_diff = fun x -> fun y -> abs (x - y)
(FWIW 在实际实践中我有时会犯这个错误,尤其是在使用 function
关键字时。)