我如何在F#中使用haskell:
f acc (x:y:z:xs) = f (acc-x+y*z) xs
f acc [] = acc
算法存在任意性,重要的一点是选择列表的前3个和尾部,因为我需要使用它们全部和尾部。
我是否必须在F#中使用重复的头部调用来强制编写它以弹出x y和z?
编辑: 请评论这项技术在haskell中正式调用的内容,我将把它放在其他人未来搜索的问题标题中,我不记得了。
答案 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个元素的尾部