3

我有一个使用 List.fold_left2 来检查列表是否为回文的函数。(折叠的使用不是可选的:这是一个家庭作业问题。)

let is_p lst =
  List.fold_left2 (fun acc e1 e2-> if (e1=e2) then acc else false) true lst (List.rev lst)

但我想优化它。一旦发现一个不匹配,返回“假”的最佳方法是什么?

我宁愿不抛出异常,但我意识到这可能是最好的答案。我还考虑将匿名函数更改为:

fun acc e1 e2-> if (not acc) then false else (if (e1=e2) then acc else false)
4

1 回答 1

4

要么使用异常,要么将折叠“展开”到自定义递归函数中。折叠模式总是遍历完整列表。

请务必对两者进行基准测试,因为在某些语言中异常处理可能是一项昂贵的操作(我不确定这是否适用于 OCaml)。

于 2011-09-15T13:39:52.793 回答