Я знаю, этот вопрос уже задан. Но я не понял ни одного ответа. Думаю, мне нужно более подробное объяснение. Я не могу понять, как «мостить» FoldLeft с FoldRight. Меня не волнует, нет ли анвера в функциональном программировании в Scala. Thabk вы очень заблаговременно.FoldLeft через FoldRight в Scala снова
ответ
Просто проверить, как те, которые реализуются:
def foldLeft[B](z: B)(op: (B, A) => B): B = {
var result = z
this foreach (x => result = op(result, x))
result
}
def foldRight[B](z: B)(op: (A, B) => B): B =
reversed.foldLeft(z)((x, y) => op(y, x))
foldLeft
траверса коллекции слева направо, применяя op
к элементу result
и тока, в то время как foldRight
траверсов перевернутой коллекции (т.е. справа налево).
Когда op
симметрично и транзитивно foldLeft
и foldRight
эквивалентны, например:
List(1,2,3).foldLeft(0)(_ + _)
List(1,2,3).foldRight(0)(_ + _)
Результат:
res0: Int = 6
res1: Int = 6
Но в противном случае foldLeft
и foldRight
может производить различные результаты:
List(1,2,3).foldLeft(List[Int]()){case (list, el) => list :+ el }
List(1,2,3).foldRight(List[Int]()){case (el, list) => list :+ el }
res2: List[Int] = List(1, 2, 3)
res3: List[Int] = List(3, 2, 1)
То, что я пытался сказать, это то, что Я не понимаю даже то, что означает «Fold Left в терминах Fold Right». Я знаю, как они работают, но я не понимаю, если foldleftviafoldright означает инкапсулировать одно внутри другого, если это означает, что я использую операцию Left To Right, но используя Fold Right. –
Кроме того, я не знаю, как это сделать, я знаю, как это сделать, но я не очень хорошо это понимаю. Извините за мой взгляд, я не программист на английском языке и программист FP. –
Какие ответы вы не понимаете? Что * * * вы понимаете foldLeft и foldRight? Что вы подразумеваете под «мостом»? – pedrofurla
Не только это было задано и уже ответили, но было предложено этим утром, но этот вопрос, кажется, был удален. Странный. Во всяком случае, вам нужно объяснить, каким образом другие недостаточно для вас, или это быстро закрывается как дубликат. Или вы тот же пользователь, который спросил и удалил другой вопрос, или какой-то курс установил это как назначение. В последнем случае вам действительно нужно что-то попробовать и опубликовать, когда вы застряли –
@pedrofurla, если это похоже на другой вопрос, речь идет о реализации foldLeft с точки зрения foldRight (и наоборот) –