【发布时间】:2014-05-13 20:52:46
【问题描述】:
我有两个版本的 foldr 实现
1) 使用 lambda 实现 foldr1
[foldr1 implementation]
(define foldr1
(lambda (func lst end)
(if (null? lst)
end
(func (car lst)
(foldr1 func (cdr lst) end)))))
2) 没有 lambda 的 foldr2 实现
[foldr2 implementation]
(define (foldr2 func end lst)
(if (null? lst)
end
(func (car lst)
(foldr2 func end (cdr lst)))))
基本相同的行为,但是当使用 foldr 实现 myFunc 时,我有两个版本的 myFunc
... myFunc2 using foldr2(foldr implemented without lambda)...
(define (myFunc2 proced lst)
(foldr2
(lambda (acc x) (cons (proced acc) x))
'()
lst)
)
=> 工作正常。
但 myFunc1(应该与 myFunc2 行为相同):
...myFunc1 using foldr1 (foldr implemented with lambda)...
(define (myFunc1 proced lst)
(foldr1
(let ((acc x) x) (cons (proced acc)))
'()
lst)
)
使用 lambda 实现的 foldr1 时,myFunc1 到底出了什么问题?
【问题讨论】: