monad-lab / study

2 stars 1 forks source link

[CH5] 첫 번째 foldr 구현이 잘못 된 예 찾기 #44

Closed zlqhem closed 9 months ago

zlqhem commented 9 months ago

https://play.haskell.org/saved/Qoxq6EOe

처음 작성했던 foldr 구현입니다

foldr_v0 f acc [] = acc
foldr_v0 f acc (x:xs) = foldr_v0 f (f x acc) xs

위의 구현은 아래 예제에서 19.0 이 나오는 반면 foldr 은 20.0 이 나옵니다.

foldr (\x y -> (x+y)/2) 54 [10,6] --20.0
foldr_v0 (\x y -> (x+y)/2) 54 [10,6] --19.0

foldr 의 evaluation 은 과정은 아래와 같습니다

foldr f 54 [10,6]
(10 + (foldr f 54 [6])) / 2
(10 + ((6 + 54) / 2) / 2

= (10 + 60 / 2) / 2
= (10 + 30) / 2
= 20
zlqhem commented 9 months ago

자문자답으로 이슈 만들었습니다..