gpt4 book ai didi

recursion - 如何在 CHICKEN 中实现可选参数?

转载 作者:行者123 更新时间:2023-12-05 00:10:46 26 4
gpt4 key购买 nike

我是 CHICKEN 和 Scheme 的新手。为了理解尾递归,我写道:

(define (recsum x) (recsum-tail x 0))
(define (recsum-tail x accum)
(if (= x 0)
accum
(recsum-tail (- x 1) (+ x accum))))

这符合我的预期。然而,这似乎有点重复;有一个可选的参数应该使这更整洁。所以我试过:
(define (recsum x . y)
(let ((accum (car y)))
(if (= x 0)
accum
(recsum (- x 1) (+ x accum)))))

但是,在 CHICKEN 中(也可能在其他方案实现中), car不能用于 () :
Error: (car) bad argument type: ()

有没有另一种方法来实现可选的函数参数,特别是在 CHICKEN 5 中?

最佳答案

我认为您正在寻找 named let , 不适用于可选的过程参数。这是使用(可能)额外参数定义辅助过程的简单方法,您可以根据需要对其进行初始化:

(define (recsum x)
(let recsum-tail ((x x) (accum 0))
(if (= x 0)
accum
(recsum-tail (- x 1) (+ x accum)))))

当然,我们也可以使用 varargs 来实现它——但我认为这看起来并不优雅:
(define (recsum x . y)
(let ((accum (if (null? y) 0 (car y))))
(if (= x 0)
accum
(recsum (- x 1) (+ x accum)))))

无论哪种方式,它都按预期工作:
(recsum 10)
=> 55

关于recursion - 如何在 CHICKEN 中实现可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56551401/

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