:
scala> def gen(n: Int, limit: Int): Iterator[List[Int]] = n match {
| case 0 => Iterator(Nil)
| case _ => for(t <- 1 to limit iterator;s <- gen(n-1, t)) yield s:+t
| }
, List n, start <= x < end, def intsListIterator
def intsListIterator(n: Int, limit: Int) = gen(n, 1, limit)
scala> def gen(n: Int, start: Int, end: Int): Iterator[List[Int]] = n match {
| case 0 => Iterator(Nil)
| case _ => for(i <- Iterator.range(start, end);s <- gen(n-1,i,end)) yield i::s
| }
gen: (n: Int, start: Int, end: Int)Iterator[List[Int]]
scala> gen(3, 1, 4) foreach println
List(1, 1, 1)
List(1, 1, 2)
List(1, 1, 3)
List(1, 2, 2)
List(1, 2, 3)
List(1, 3, 3)
List(2, 2, 2)
List(2, 2, 3)
List(2, 3, 3)
List(3, 3, 3)
scala> gen(7, -3, 4) take 10 foreach println
List(-3, -3, -3, -3, -3, -3, -3)
List(-3, -3, -3, -3, -3, -3, -2)
List(-3, -3, -3, -3, -3, -3, -1)
List(-3, -3, -3, -3, -3, -3, 0)
List(-3, -3, -3, -3, -3, -3, 1)
List(-3, -3, -3, -3, -3, -3, 2)
List(-3, -3, -3, -3, -3, -3, 3)
List(-3, -3, -3, -3, -3, -2, -2)
List(-3, -3, -3, -3, -3, -2, -1)
List(-3, -3, -3, -3, -3, -2, 0)