Я читал в разделе «Программирование в Scala» 23.5, что операции map, flatMap и filter всегда можно преобразовать в «для понимания» и наоборот.
Нам дан следующий эквивалент:
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 строк "открытый" или "закрытый" в зависимости от логического значения
Я полагаю, что существует стандартный способ перевода операций с картой, и детали реальных функций в них не важны. Хотя я могу ошибаться.)