我想將此ML代碼翻譯成F#。通過翻譯ML的等效實現與F#
fun take ([], i) = []
| take (x::xs, i) = if i > 0 then x::take(xs, i-1)
else [];
我想這一個
let rec take n i =
match n,i with
| [], i -> []
| x::xs, i -> if i > 0 then x::take(xs, i-1)
else [];
let val = take [1;2;3;4] 3
而這一次
let rec take input =
match input with
| ([], i) -> []
| (x::xs, i) -> if i > 0 then x::take(xs, i-1)
else [];
let val = take ([1;2;3;4] 3)
但他們兩人給我一個錯誤take.fs(7,5): error FS0010: Unexpected keyword 'val' in binding
。 F#代碼有什麼問題?
對於第二個版本,我得到了'錯誤FS0003:這個值是不是一個函數,不能applied'錯誤,它似乎除了最後的';'以外,和我一樣。 – prosseek 2011-06-05 21:57:48
不,你應該使用take([1; 2; 3; 4],3)而不是take([1; 2; 3; 4] 3)。注意','是兩個版本之間的區別。 – pad 2011-06-05 22:05:09
我明白了。謝謝。 – prosseek 2011-06-05 22:08:14