我有一个使用 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)
但我想优化它。一旦发现不匹配项,立即返回“false”的最佳方法是什么?
我宁愿不抛出异常,但我意识到这可能是最好的答案。我还考虑过将匿名函数更改为:
fun acc e1 e2-> if (not acc) then false else (if (e1=e2) then acc else false)
最佳答案
要么使用异常,要么将折叠“展开”到自定义递归函数中。折叠模式始终遍历完整列表。
一定要对两者进行基准测试,因为异常处理在某些语言中可能是一项昂贵的操作(我不确定 OCaml 是否如此)。
关于functional-programming - "Break"在 OCaml 中不合时宜?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7431760/