1
我嘗試使用模式匹配這樣實現在F#Fibonacci序列:F#模式匹配和功能
let fibonacci m=
let rec fib = function
| (0, _, z) -> z
| (n, y, z) -> fib (n-1) z (y+z)
fib m 0 1
在這裏,我想到的第一個參數撒謊跟蹤多遠沿着序列我們在,接下來的兩個參數是序列中的連續項。
不過,我對fib (n-1) z (y+z)
得到一個編譯時錯誤:
Type mismatch. Expecting a
'a -> 'b -> 'c
but given a
'c
The resulting type would be infinite when unifying ''a' and ''b -> 'c -> 'a'
我試圖指定類型,像這樣:
let fibonacci m=
let rec fib = function
| (0, _, z:int) -> z
| (n:int, y:int, z:int) -> fib (n-1) z (y+z)
fib m 0 1
然後我得到fib (n-1)
不同的編譯錯誤:
This value is not a function and cannot be applied
我仍然試圖讓我的頭在functiona l編程。我認爲問題可能是我對第一種模式的實際含義缺乏瞭解。我想這意味着當位置參數爲零時,它返回第二個參數項。
可能有人能幫我解決這個問題,這顯然是因爲對我而言有些基本的誤解
權利是有道理的,我想你只能在一個單一的實體上真正的模式匹配,而不是參數列表 – 2014-10-27 15:14:40
是的,你可以。查看帶有匹配...的示例的更新。 – Gustavo 2014-10-27 15:15:32