Вот один из способов вообще избежать любых переменных:
val q0 = collection.immutable.Queue("1","Two","iii")
Iterator.iterate(q0) { qi =>
val (e,q) = qi.dequeue
println("I just dequeued "+e) // Your side-effecting operations go here
if (e.length!=2) q.enqueue("..") // Your changes to the queue go here
else q
}.takeWhile(! _.isEmpty).foreach(identity)
Вы начинаете с начальной очереди, q0
, а затем на qi
-ом шаге что-то исключаете из очереди и производите новыйочереди, если необходимо, возвращая это для следующего шага.
Все, что у вас осталось, это условие остановки (не пустое), а затем, поскольку это просто определяет процесс, а не фактическое действие, вы должны запустить его(например, используя foreach без операции).