【发布时间】:2021-06-04 07:54:44
【问题描述】:
我正在练习方案,我正在研究如何在方案中实现foldr 函数,希望以尾递归的方式实现。
例如:
(my-foldr + 0 '(1 2 3 4)) => 10
(my-foldr list '() '(1 2 3 4)) => '(1 (2 (3 (4 ())))))
我通过在 scheme 中实现 map 开始了我的实践,但我似乎无法获得 foldr。如果有人有任何建议,将不胜感激!提前致谢。
【问题讨论】:
-
请发布您目前编写的
foldr实现代码,指出给您带来麻烦的确切部分。同时发布示例输入和预期输出。 -
foldr应该被定义为(foldr f z [a, ...])==(f a (foldr f z [...]))和(foldr f z [])==z。以后担心效率,特别是。在 Racket (您似乎正在使用)下,将其定义为尾递归 a.o.t 没有任何好处。尾递归模“缺点”(即模f)。
标签: functional-programming scheme racket