Scala: использование свертывания для генерации списка Int - PullRequest
2 голосов
/ 14 марта 2012

Я изучаю 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 ]

1 голос
/ 15 марта 2012

Вы на правильном пути:

  1. Убедитесь, что fromUntil синтаксически правильно - у вас есть несколько дополнительных фигурных скобок
  2. Поскольку последовательность «от до» должна сохранять последовательность
  3. y в пределах unfold должно расти с каждым звонком

Продолжайте, попробуйте посмотреть, что произойдет, если вы позвоните fromUntil(1,1), а затем, если вызвоните fromUntil(1,2) и так далее.Ты почти там.

1 голос
/ 15 марта 2012

Поскольку это домашняя работа, я не даю вам полного ответа, а лишь некоторые подсказки:

  1. Самая сложная часть вашей работы - определить, что должно быть функцией f в fromUntil
  2. посмотрите, как реализовано развертывание.Особенно в нескончаемом случае.Откуда взялось это y, когда оно было вычислено?
  3. Можете ли вы определить f из того, что вы зарезервировали?
...