2012-03-14 56 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)等,然後會發生什麼會發生什麼。你快到了。