Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OCaml-与使用fold相关的问题___Ocaml - Fatal编程技术网

OCaml-与使用fold相关的问题__

OCaml-与使用fold相关的问题__,ocaml,Ocaml,我有几个关于左/右折叠的问题 如何累积两个或多个值?如果使用元组是一个好的解决方案 如何中止折叠工作?例如,我们必须首先找到任何数字的出现,并返回位置。我的意思是休息(C++) zurgl的评论是一个很好的答案(也许可以把它移到答案区域) 您可以使用异常提前终止折叠。在我看来,最好尝试构造代码,这样就不必这样做了。无异常的代码更容易理解、更易于组合、可并行化等。我们必须首先找到任何数字的出现处,然后您必须遍历所有列表[1;1;1;1;5],无需在此中止。要处理部分递归,还有其他函数,如dropw

我有几个关于左/右折叠的问题

  • 如何累积两个或多个值?如果使用元组是一个好的解决方案
  • 如何中止折叠工作?例如,我们必须首先找到任何数字的出现,并返回位置。我的意思是休息(C++)
    zurgl的评论是一个很好的答案(也许可以把它移到答案区域)


    您可以使用异常提前终止折叠。在我看来,最好尝试构造代码,这样就不必这样做了。无异常的代码更容易理解、更易于组合、可并行化等。

    我们必须首先找到任何数字的出现处,然后您必须遍历所有列表[1;1;1;1;5],无需在此中止。要处理部分递归,还有其他函数,如dropwhile、takewhile。。。或者你可以定义你需要的。将折叠视为类型之间的投影,您有一个源类型和一个带有种子值的目标类型(累加器),那么折叠就是实现此转换的过程。是的,在我看来,使用元组是一个很好的解决方案。

    我们必须首先找到任何数字的出现处
    ,然后您必须遍历所有列表[1;1;1;1;5],无需在此中止。要处理部分递归,还有其他函数,如dropwhile、takewhile。。。或者你可以定义你需要的。将折叠视为类型之间的投影,您有一个源类型和一个带有种子值的目标类型(累加器),那么折叠就是实现此转换的过程。是的,IMO,使用元组是一个很好的解决方案。