为何功能完整的map、filter、fold-right/fold-left需要环境模型?
环境模型与map等函数的实现关系探讨
这是某问答的跟进问题,此前的讨论聚焦于如何在C++中实现map等函数,但未深入探讨环境模型与map等函数的关系。
SICP中基于递归或迭代实现了map、filter、fold-left:
(define (map proc items) (if (null? items) nil (cons (proc (car items)) (map proc (cdr items))))) (define (filter predicate sequence) (cond ((null? sequence) nil) ((predicate (car sequence)) (cons (car sequence) (filter predicate (cdr sequence)))) (else (filter predicate (cdr sequence))))) (define (fold-left op initial sequence) (define (iter result rest) (if (null? rest) result (iter (op result (car rest)) (cdr rest)))) (iter initial sequence))
在C++中,proc这类操作可以通过函数指针传递。
在Scheme中,lambda的递归调用需要创建新环境来存储局部绑定,但在C++中这可以通过栈实现。以fold-left中的iter定义为例,我们可以用struct并在其中定义局部函数iter(借助operator()实现局部绑定)。
核心问题:能否认为环境模型仅用于确保lambda正确调用函数,而这一功能也可以通过栈来实现?
内容的提问来源于stack exchange,提问作者An5Drama
相关产品推荐
相关产品推荐

