2013-10-27 56 views
0

我有几个问题与fold_left/right相关。OCaml - 与使用fold关联的问题_

  1. 如何积累两个或更多值?如果使用元组是很好的解决方案?
  2. 如何中止折叠工作?例如,我们必须首先发现任何数字,并返回位置。我的意思是休息(C++)。
+0

'我们必须首先发现任何数字'然后你必须遍历所有的列表[1; 1; 1; 1; 5],不需要在这里中止。为了处理部分递归,还有其他的功能,如dropwhile,take ...或者你可以定义你需要的。请参阅在类型之间折叠为投影,您有源类型和具有种子值(累加器)的目标类型,然后折叠是实现此转换的过程。是的,使用元组是很好的解决方案,IMO。 – zurgl

回答

1

zurgl的评论是一个很好的答案(也许将其下移到答案区域)。

您可以使用异常提前终止折叠。尝试构建你的代码是很好的,所以你不必这样做(在我看来)。没有例外的代码更容易理解,更加可组合,可并行化等。

+0

感谢您的赞赏 – zurgl

1

we must find firstly occurrence of any number然后你必须遍历所有你的列表[1; 1; 1; 1; 5],不需要在这里中止。为了处理部分递归,还有其他的功能,如dropwhile,take ...或者你可以定义你需要的。请参阅在类型之间折叠为投影,您有源类型和具有种子值(累加器)的目标类型,然后折叠是实现此转换的过程。是的,使用元组是很好的解决方案,IMO。