Что эквивалентно F # seq monad в Scala - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь перейти от F # к Scala.В F # мы можем легко создать последовательность с выражением вычисления или монадой.Например:

let myseq = seq {
    let mutableList = List()
    for i = 0 to 100 do
        mutableList.append(i)
        yield sum(mutableList)
 }

myseq |> Seq.iter println

Я читал о scala Stream, но я не уверен, как правильно его использовать, как в примере выше, который содержит некоторое состояние, постоянно обновляющееся во время генерации seq.

Другим примером может быть выполнение некоторой работы по инициализации и очистке в seq:

let myseq = seq {
    let file = open(path)
    while (x = read(file)) do
        yield x
    file.close() }

Можем ли мы сделать это в Scala?

1 Ответ

0 голосов
/ 31 мая 2018

Scala имеет Понимание последовательности с использованием ключевых слов for и yield, как в следующем примере:

object ComprehensionTest extends App {
    def even(from: Int, to: Int): List[Int] =
        for (i <- List.range(from, to) if i % 2 == 0) yield i
    Console.println(even(0, 20))
}
...