У меня примерно так:

    case class FunctionsTest(lowerBound: Int = 1,
                                upperBound: Int = 1000,
                                factor: Int = 2) {
  require(lowerBound < upperBound)

  /**
    * implement a sequence of ints, which start with lowerBound and end with
    * upperbound.
    *
    * for all elements following should be true:
    *
    * xs(i) < xs(i+1)
    * xs(i) + factor == xs(i + 1) (for i > 0 and i <= 1000)
    *
    */
  val xs: Seq[Int] = Seq.range(lowerBound,upperBound +1)

Итак, мне нужна последовательность для этого класса, составляющая эти критерии. Я пробовал это с

Seq.range ()

Но он создает мне Последовательность, которая подходит для первого критерия, но я не знаю, как теперь применить второй критерий, упомянутый в комментарии?

1
bajro 30 Окт 2015 в 02:36

4 ответа

Лучший ответ

Параметр step в Seq.range[T](start: T, end: T, step) позволяет увеличить в раз.

scala> Seq.range(1,10,2)
res0: Seq[Int] = List(1, 3, 5, 7, 9)

Это удовлетворяет обоим критериям.

scala> res0.zip(res0.tail).forall(t => t._1 < t._2)
res4 Boolean = true

А также

scala> res0(0) + 2 == res0(0 + 1)
res5: Boolean = true
4
Brian 29 Окт 2015 в 23:47

Вы можете создать его с помощью простого {{X0} }.

Включительно: (lowerBound to UpperBoud)

Эксклюзив: (lowerBound until UpperBound)

Если вам нужен ленивый оценщик, вроде счетчика ленты для ожидания в почтовом отделении, вы можете использовать scala Stream. Они очень эффективны с точки зрения памяти, поскольку хранят только начало диапазона и лениво оценивают хвост только при необходимости. Их функции map, filter, reduce, ... тоже ленивы.

scala.collection.immutable.Stream.range(lowerBound, upperBound)
1
Ramón J Romero y Vigil 29 Окт 2015 в 23:46

Метод диапазона позволяет установить параметр шага

Seq.range(lower, upper, factor)
1
vvg 29 Окт 2015 в 23:44

В более общем плане вы можете сгенерировать последовательность, используя произвольную функцию, используя iterate:

Seq.iterate(1,1000)(_ + 2)

В вашем случае произвольная функция составляет «a = a + 2», которая многократно применяется к начальному значению: 1, 1 + 2, (1 + 2) +2, ...

2
Shadowlands 30 Окт 2015 в 00:30