在Eric Torreborre关于迭代器模式的本质论文的博文中,他描述了导线的笛卡尔积也是如何遍历.
任何人都可以使用scalaz库向我展示这个例子,因为我无法弄明白.让我们说问题是,对于List[Int]我想提供的两个:
Int列表中元素的总和List[String]其中的元件通过附加"Z"到的String表示创建的Int小号我的理解是,我可以使用traverse这种方式,但只是实际遍历我的结构一次,不像这个解决方案:
val xs = List(1, 2, 3, 4)
val (sum, strings) = (xs.sum, xs map (_.toString + "Z"))
Run Code Online (Sandbox Code Playgroud)
注1 - 我知道还有其他方法可以做到这一点,我不需要遍历这个例子,也不一定是最简单的解决方法.但是,我试图理解遍历,所以我真的在寻找所述问题的答案
编辑 - 感谢missfaktor下面显示如何使用State.我想我想知道的是我如何编写两个独立的计算.例如; 我的职能在概念上如下:
val shape = (_ : List[Int]) map (_.toString + "Z")
val accum = (_ : List[Int]).sum
Run Code Online (Sandbox Code Playgroud)
我希望这些累积机制彼此独立,然后选择是否List[Int]使用其中一个或两个来遍历我.我想象一些代码有点像这样: …