私は Scala でのプログラミング セクション 23.5 で、map、flatMap、およびフィルター操作は常に for-comprehensions に、またはその逆に変換できることを読みました。
次の同等性が与えられます。
def map[A, B](xs: List[A], f: A => B): List[B] =
for (x <- xs) yield f(x)
一連のマップ操作から計算された値があります。
val r = (1 to 100).map{ i => (1 to 100).map{i % _ == 0} }
.map{ _.foldLeft(false)(_^_) }
.map{ case true => "open"; case _ => "closed" }
これが理解のためにどのように見えるのか疑問に思っています。どのように翻訳すればよいですか?
(参考になれば、これは次のとおりです。
- 1 から 100 までの整数を取る
- それぞれについて、100 個のブール値のリストを作成します
- 各リストを XOR 演算子で折り畳み、ブール値に戻します
- ブール値に応じて、「開いている」または「閉じている」100個の文字列のリストを生成します
マップ操作を変換する標準的な方法があり、それらの実際の機能の詳細は重要ではないと思います。間違っているかもしれませんが。)