F#版本的Haskell列表解构

时间:2012-07-26 20:49:25

标签: .net haskell f# functional-programming

我如何在F#中使用haskell:

f acc (x:y:z:xs) = f (acc-x+y*z) xs
f acc [] = acc

算法存在任意性,重要的一点是选择列表的前3个和尾部,因为我需要使用它们全部和尾部。

我是否必须在F#中使用重复的头部调用来强制编写它以弹出x y和z?

编辑: 请评论这项技术在haskell中正式调用的内容,我将把它放在其他人未来搜索的问题标题中,我不记得了。

2 个答案:

答案 0 :(得分:12)

模式匹配失败时你想做什么?你可能想要这个:

let rec f acc = function
  | x::y::z::xs -> f (acc-x+y*z) xs
  | _ -> acc

答案 1 :(得分:2)

像这样??

let rec f acc (x::y::z::xs) = f(acc - x + y * z) xs

但请注意,此函数将始终以MatchFailureException结束,因为它会尝试急切地评估f,直到它到达小于3个元素的尾部