這裏的代碼工作正常:F#中可能會使用中間函數參數嗎?
let f x y z = x + y + z
let g x y = f x y
let h x z = z |> f x
所以,我可以寫表達 「H 1」 和FSI顯示:
val it : (int -> int -> int) = <fun:[email protected]>
如果我稱之爲 「H 1 2 3」,參數應用按照正確的順序。
但如果最後一個參數有不同的類型,事情變得不同:
let ff x y (z : string) = x + y
let gg x y = ff x y
let hh x (z : string) = z |> ff x
現在最後一個函數HH導致一個錯誤信息:
Script.fsx(119,10):錯誤FS0001 : 類型不匹配。期待
string -> 'a
但給出int -> string -> int
。該類型string
不匹配的類型int
我明白爲什麼會這樣 - 「Z」附加到「FF X」使其成爲第二個參數。但後來我想在第一個例子中表達式「h 1 2 3」不能正常工作(被執行爲「f 1 3 2」)。但它工作得很好。
你確定'h 1 2 3'執行爲'f 1 2 3'而不是'f 1 3 2'嗎?畢竟,1 + 2 + 3 == 1 + 3 + 2 == 6.也許嘗試與非傳遞算子? – tzaman 2010-07-07 13:11:27
FWIW,OCaml標註的參數允許您部分無序應用。 – 2010-07-08 23:28:46