【发布时间】:2014-12-08 13:44:02
【问题描述】:
我有一个运行良好的代码:
let rec calculate s l acc =
if length s = 0 then
acc
else
if first s = l then
calculate (rest s) l (acc+1)
else
calculate (rest s) (first s) acc
我想用模式匹配重写它:
let rec calculate s l acc =
function
| _, _, _ when length s = 0 -> acc
| _, _, _ when first s = l -> calculate (rest s) l (acc+1)
| _, _, _ -> calculate (rest s) (first s) acc
但是最后一个函数返回错误信息:
| _, _, _ when first s = l -> calculate (rest s) l (acc+1) -----------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^/Users/demas/temporary/stdin(512,36):错误 FS0001:类型不匹配。 期待一个 'a 但给定一个 'b * 'c * 'd -> 'a 统一 ''a' 和 ''b * 'c * 'd -> 'a' 时产生的类型是无限的
为什么?
【问题讨论】:
-
这是一种模式匹配并没有真正带来任何东西的情况。我只会使用您的原始代码,使用
elif而不是else if以避免缩进太深,仅此而已。
标签: f#