Functional programming 从头开始在Scheme中实现foldr功能
我正在练习scheme,我正在研究如何在scheme中实现Functional programming 从头开始在Scheme中实现foldr功能,functional-programming,scheme,racket,Functional Programming,Scheme,Racket,我正在练习scheme,我正在研究如何在scheme中实现foldr函数,希望能以尾部递归的方式实现 例如: (我的文件夹+0'(1234))=>10 (我的文件夹列表“()”(1234))=>”(1(2(3(4)()))) 我通过在scheme中实现map开始了我的实践,但我似乎无法获得foldr。如果有人有任何建议,我们将不胜感激!提前感谢。这是简化的foldr/foldl,仅用于一个列表: (define (my-foldr proc init lst) (my-foldl proc
foldr
函数,希望能以尾部递归的方式实现
例如:
(我的文件夹+0'(1234))=>10
(我的文件夹列表“()”(1234))=>”(1(2(3(4)())))
我通过在scheme中实现map开始了我的实践,但我似乎无法获得foldr。如果有人有任何建议,我们将不胜感激!提前感谢。这是简化的foldr/foldl,仅用于一个列表:
(define (my-foldr proc init lst)
(my-foldl proc init (reverse lst)))
(define (my-foldl proc init lst)
(if (empty? lst) init
(my-foldl proc
(proc (car lst) init)
(cdr lst))))
有关更多列表:
(define (my-foldr proc init lst . lsts)
(apply my-foldl proc init (reverse lst) (map reverse lsts)))
(define (my-foldl proc init lst . lsts)
(if (empty? lst) init
(apply my-foldl proc
(apply proc (append (list (car lst))
(map car lsts)
(list init)))
(cdr lst)
(map cdr lsts))))
例如:
(my-foldl (lambda (a b result)
(* result (- a b)))
1
'(1 2 3)
'(4 5 6))` => -27
请发布您目前编写的
foldr
实现代码,指出给您带来麻烦的确切部分。还应发布示例输入和预期输出。foldr
的定义应确保(foldr f z[a,…])
=(f a(foldr f z[…])
和(foldr f z[])
=z
。稍后再担心效率,尤其是在Racket(您似乎正在使用)下,将其定义为尾部递归a.o.t.尾部递归模“cons”(即模f
)没有任何好处。