The example below indexes the values of the fixed sequence to avoid traversing the list each time a new stream is started.
package rando
object Faster extends App {
val directions = Vector("north", "east", "south", "west")
val index = directions.zipWithIndex.map { case (d, i) => d -> i }.toMap
def streamWithStart(start: String): Stream[String] =
directions.drop(index(start)).toStream.append(Stream.continually(directions).flatten)
streamWithStart("east") take 10 reduce(_+" "+_) foreach print; println()
streamWithStart("north") take 10 reduce(_+" "+_) foreach print; println()
streamWithStart("west") take 10 reduce(_+" "+_) foreach print; println()
streamWithStart("south") take 10 reduce(_+" "+_) foreach print; println()
}