2016-02-07 41 views
1

我有個問題,爲什麼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;;

0123的另一個功能

與第一個定義它完美的工作,但第二個它沒有按預期工作。我們得到,這是

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

爲什麼它表現得像是,爲什麼在第一的這兩個定義看起來相同的功能有什麼不同?

回答

5

在您的第二個定義中,您有兩個不同的外觀(綁定)xy。這就是爲什麼結果中有四個參數。這是你想要什麼:(FWIW在實際操作中我有時會犯這種錯誤,尤其是使用function關鍵字時)

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

+0

現在我看到我的錯也,謝謝:d – measuretheory