我无法弄清楚为什么我在以下代码中不断出现stackoverflow错误。是什么导致了它?
let rec fl x y ct = match x with
[] -> []
| (h::t) -> if haskey ct y = true then (fl x y (ct + 1))
else h :: (fl x y (ct + 1))
;;
答案 0 :(得分:2)
你的fl函数无限地自我修复:
let rec fl x y ct = match x with
[] -> []
| (h::t) -> if haskey ct y = true then (fl x y (ct + 1))
else h :: (fl x y (ct + 1))
;;
递归调用的唯一变化是ct的增量。据推测,你需要ct的某种终止条件,或者你需要用列表的尾部调用fl。