Scala:使用折叠生成Int的列表

时间:2012-03-14 19:43:45

标签: scala folding

我正在学习Scala,作为一项作业,我必须使用折叠来生成Int的列表:

// Generate list of integers by applying f to b until it returns None
def unfold(b: Int, f: Int => Option[(Int, Int)]): IntList = {
  f(b) match {
    case None => Nil()
    case Some((x, y)) => Cons(x,unfold(y, f))
  }
}

这个展开工作得很好,但是现在我必须写一个fromUntil,说实话,我完全迷失了怎么办?所以我只是随机开始,但这根本不起作用。一些帮助将不胜感激!

// generate the list of integers from i until j
def fromUntil(i: Int, j: Int): IntList = {
    unfold(i, (x: Int) =>if(x < j) Some((j, j - 1)) else None)
    }
}

杰罗姆

2 个答案:

答案 0 :(得分:1)

由于这是一项功课,我不会给你一个完整的答案,只有一些线索:

  1. 您工作中最难的部分是定义f
  2. fromUntil函数必须包含的内容
  3. 看看如何展开展开。特别是非终止案例。 y来自哪里,何时计算?
  4. 你能从你所服务的人那里定义f吗?

答案 1 :(得分:1)

你走在正确的轨道上:

  1. 检查fromUntil语法是否正确 - 你有一些额外的大括号
  2. 因为它是“从直到”,序列应该不断增加。
  3. {li> y unfold内每次通话都应保持增长

    继续前进,试着看看如果你拨打fromUntil(1,1)会发生什么,如果你拨打fromUntil(1,2)会发生什么,等等。你快到了。