functional-programming - "Break"在 OCaml 中不合时宜?

标签 functional-programming ocaml break fold

我有一个使用 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/

相关文章:

python - 函数仅打印 5K 文件目录中四个文件的值,Python

javascript - Ramda 中的 curry 和偏函数有什么区别?

java - 惰性组合 Observables

java - 为什么这个 lambda 可以在这里使用,其中需要 Arrays.sort() 中的比较器

OCaml 选项获取

c - C 中的中断错误

html - 如果长度超过表格单元格宽度,则将文本截断到最后一个单词

matlab - MATLAB 是否执行尾调用优化?

compiler-construction - 创建编译器 : Learn OCaml or Stick With Java/C/C++

algorithm - 计算列表列表中的元素数量