foldr 특) 왼쪽부터 평가함
foldr (\x y -> if x == 3 then 1 else y) 0 [1,2,3,4,5]
-- 1,2,3까지만 본다
하스켈 클로저 인자에 백슬래시 붙여야 하는거 아니였나
디시가 디시 한 것
우측부터 차례로 계산한다는 사람 논리의 흐름이랑은 다른데 평가 과정 풀어써보면 좌측부터 평가하는게 당연한걸 깨닫게 됨 ㅋㅋ
근데 저러면 foldr이 뭐하러 있는거냐
foldl이랑 foldr이랑 접는 방향이 다름. foldr은 오른쪽에서 왼쪽으로 접는건데 outermost evaluation이라 평가 순서만 뒤집힌거임.
오른쪽부터 보는데 5를 왜 안봄
그니까 골때린다고 ㅋㅋㅋㅋㅋ
foldr을 풀면 f 1 (f 2 (f 3 (f 4 (f 5 0)))) 임. 그런데 lazy eval 이라 맨 바깥쪽 f부터 평가함
왼쪽부터 평가한다는게 foldl의 왼쪽부터 연산하고 그 결과를 그 바로 오른쪽거로 한다 이 얘기가 아님
하스켈 클로저 인자에 백슬래시 붙여야 하는거 아니였나
디시가 디시 한 것
우측부터 차례로 계산한다는 사람 논리의 흐름이랑은 다른데 평가 과정 풀어써보면 좌측부터 평가하는게 당연한걸 깨닫게 됨 ㅋㅋ
근데 저러면 foldr이 뭐하러 있는거냐
foldl이랑 foldr이랑 접는 방향이 다름. foldr은 오른쪽에서 왼쪽으로 접는건데 outermost evaluation이라 평가 순서만 뒤집힌거임.
오른쪽부터 보는데 5를 왜 안봄
그니까 골때린다고 ㅋㅋㅋㅋㅋ
foldr을 풀면 f 1 (f 2 (f 3 (f 4 (f 5 0)))) 임. 그런데 lazy eval 이라 맨 바깥쪽 f부터 평가함
왼쪽부터 평가한다는게 foldl의 왼쪽부터 연산하고 그 결과를 그 바로 오른쪽거로 한다 이 얘기가 아님