스칼라의 콜렉션의 fold와 reduce와 scan 함수는 시간이 조금만 지나면 혼동되기 쉬운 것 같다. 

accumulate 기능이 있어서 서로 비슷하게 생겼다..





List(1,2,3).foldLeft(100)((s,x) => s - x)

((100 - 1) - 2) -3 = 94 




List(1,2,3).foldRight(100)((s,x) => s - x)

1 - (2 - (3 - 100)) = -98




List(1,2,3).reduceLeft((s,x) => s - x)

(1 - 2) - 3 = -4




List(1,2,3).reduceRight((s,x) => s - x)

1 - ( 2 - 3) = 2






List(1,2,3).scanLeft(100)((s, x) => s - x)

List(100, 100-1, (100-1)-2, (100-1)-2-3) 

=> List(100, 99, 97, 94)





List(1,2,3).scanRight(100)((s, x) => s - x)

// index3 : 초기값 100

// index2 : 3 - 100 = -97

// index1 : 2 - -97 = 99

// index0 : 1 - 99 = -98

List(-98, 99, -97, 100)

Posted by '김용환'
,