【发布时间】:2014-12-22 19:08:20
【问题描述】:
我尝试使用这样的模式匹配在 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 的第一个参数跟踪我们在序列中的距离,接下来的两个参数是序列中的连续项。
但是,我在 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
我仍在努力研究函数式编程。我认为问题可能是我对第一个模式的实际含义缺乏理解。我希望它意味着当位置参数为零时,它返回第二个参数项。
有人可以帮我解决这个问题吗,这显然是由于我的一些基本误解
【问题讨论】:
标签: f# pattern-matching