gpt4 book ai didi

functional-programming - 如何使用 2 个参数创建左折叠?

转载 作者:太空宇宙 更新时间:2023-11-03 19:00:31 26 4
gpt4 key购买 nike

我如何编写带有 2 个参数的 fold-left 函数 (foldl-1 proc xs)?这不起作用:

(define (my-fold-left op xs)
(define (func proc start xs)
(let ((start xs))
(set! start (car xs))
(if (null? xs) start
(func op (op start (car xs)) (cdr xs))))))

最佳答案

您的代码没有意义...为什么要在这里使用 set!?结果的初始值是多少?如果您不打算调用,为什么要定义函数func?要实现典型的 3-arg fold-left 尝试这样的事情,注意 fold-left 的主要优点是它是 tail-recursive,我们使用一个参数来累积结果:

(define (fold-left op ini xs)
(let loop ((acc ini) (lst xs))
(if (null? lst)
acc
(loop (op (car lst) acc) (cdr lst)))))

如果您确实需要一个 2-arg 版本的 fold-left,请删除 ini 参数并为 acc 设置默认值开始,在第二行。请注意,这样做会限制此过程的用途,使其仅返回固定类型的结果,具体取决于您选择的初始值。

关于functional-programming - 如何使用 2 个参数创建左折叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32977411/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com