- 论坛徽章:
- 2
|
回复 54# starwing83
终于化简出来了……
根据foldr的定义:
- foldr f a [b0,b1,...,bp,bq,br]
- = (f b0 (f b1 ... (f bp (f bq (f br a)))))
复制代码 令:那么:
- foldr F id [b0,b1,...,bp,bq,br]
- = (F b0 (F b1 ... (F bp (F bq (F br id))))) ; F = \...
- = (F b0 (F b1 ... (F bp (F bq ((\b g x -> g (f x b)) br id))))) ; b = br
- = (F b0 (F b1 ... (F bp (F bq ((\ g x -> g (f x br)) id))))) ; g = id
- = (F b0 (F b1 ... (F bp (F bq ((\ x -> id (f x br))))))) ; x = y
- = (F b0 (F b1 ... (F bp (F bq (\y -> id (f y br))))))
- = (F b0 (F b1 ... (F bp (F bq (\y -> id (f y br)))))) ; F = \...
- = (F b0 (F b1 ... (F bp ((\b g x -> g (f x b)) bq (\y -> id (f y br)))))) ; b = bq
- = (F b0 (F b1 ... (F bp ((\ g x -> g (f x bq)) (\y -> id (f y br)))))) ; g = \y -> ...
- = (F b0 (F b1 ... (F bp ((\ x -> (\y -> id (f y br)) (f x bq)))))) ; y = (f x bq)
- = (F b0 (F b1 ... (F bp ((\ x -> id (f (f x bq) br)))))) ; x = y
- = (F b0 (F b1 ... (F bp (\y -> id (f (f y bq) br)))))
- = (F b0 (F b1 ... (F bp (\y -> id (f (f y bq) br))))) ; F = \...
- = (F b0 (F b1 ... ((\b g x -> g (f x b)) bp (\y -> id (f (f y bq) br))))) ; b = bp
- = (F b0 (F b1 ... ((\ g x -> g (f x bp)) (\y -> id (f (f y bq) br))))) ; g = \y ->
- = (F b0 (F b1 ... ((\ x -> (\y id (f (f y bq) br)) (f x bp))))) ; y = (f x bp)
- = (F b0 (F b1 ... ((\ x -> id (f (f (f x bp) bq) br)))))
- ...
- = \x -> id (f (f (f (f (f (f x b0) b1) ...) bp) bq) br)
复制代码 于是再将 x = a 代入:
- foldr F id [b0,b1,...,bp,bq,br] a
- = (\x -> id (f (f (f (f (f (f x b0) b1) ...) bp) bq) br)) a
- = f (f (f (f (f (f a b0) b1) ...) bp) bq) br
复制代码 就是foldl了……
|
|