2012-03-14 34 views
2

我学习Scala,并作为一个任务,我必须用折叠生成廉政局的名单:斯卡拉:使用折叠生成的列表诠释的

// 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)) 
    } 
} 

此展开工作得很好,但现在我不得不写一个直接的,老实说,我完全失去了什么?所以我只是随机开始,但这根本不起作用。一些帮助将不胜感激!

// 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) 
    } 
} 

杰罗姆

回答

1

因为它是一个功课,我不给你一个完整的答案,但只有一些线索:

  1. 你的工作中最难的部分是确定要做就要做到f功能fromUntil
  2. 看看如何实现。尤其是非终止的情况。 y从哪里来,它是什么时候计算的?
  3. 你可以定义f从你oserved?
1

你在正确的轨道上:

  1. 检查fromUntil是语法正确的 - 你有一些额外的括号
  2. 因为它是“从到”的顺序应该不断增加。
  3. yunfold应保持在每次调用

一直走越来越大,尝试看看,如果你打电话fromUntil(1,1),如果你打电话fromUntil(1,2)等,然后会发生什么会发生什么。你快到了。