2017-07-07 7 views
-4

以下のステートメントを理解するのを手伝ってください。私はfoldLeftがここでどのように動作するかを理解することができませんでした:ScalaでfoldLeftを理解する

scala> l1 
res71: List[Double] = List(1.0, 1.0, 1.0) 

scala> l2 
res72: List[Double] = List(1.5, 0.0) 

scala> l1.foldLeft(l2) { (a,b) => (b + a.head) :: a} 
res73: List[Double] = List(4.5, 3.5, 2.5, 1.5, 0.0) 

答えて

2

foldLeftList[A]に次のようになります。

def foldLeft[B](z: B)(f: (B, A) => B): B 

それは、これは通常、あなたのケースでは、それはリストl2だ、タイプBの種になりますアキュムレータとして機能し、アキュムレータとあなたが折り畳んでいるリストから値を受け取り、アキュムレータのタイプを返す関数です。あなたの例では

(a,b) => (b + a.head) :: a 

aList[Double]、bはl1リストから値です。これはアキュムレータの先頭にl1の値を加え、アキュムレータaと連結します。

折りたたみ機能の中にprintlnを追加して、各繰り返しで作成された値を確認することをお勧めします。

+1

恐ろしく!私は今理解した。ありがとうございました :) – Sudha

関連する問題