0
私はCPSフォームにこのコードを変換しよう:継続渡しスタイルの和の要素
def sum (lst : List [ Int ]) : Int = lst match {
case Nil => 0
case first :: rest => first + sum (rest)
}
def sumC1(lst : List [ Int ], k : Int => Unit) : Unit = lst match {
case lst => k(sum(lst))
}
私はスカラ座に新しいMAと非常に大きな問題だが、構文をundertand。
def sum(lst: List[Int])(cont: Int => Int): Int = lst match {
case Nil => cont(0)
case first :: rest => sum(lst){rest => cont(first + rest) }
}
def sumC1(lst: List[Int], k: Int => Unit): Unit = lst match {
case lst => k(sum(lst))
}
sumC1(List(1, 2, 3), (v: Int) => println(v))
この回答は練習の目的を破っており、計算全体を通して継続をスレッド化しているはずです。 – Lee
最初のスニペットは継続継承を正確に実行しています – Mikel
'cont'がどこにも定義されていないため、最初のスニペットはコンパイルされません。そうであれば、 'Int => Unit'型を持つので、' cont + i'は型チェックを行いません。あなたは合計を直接計算してからそれを継続に渡し、総プロセスをスルーアウトしません。 – Lee