我正在创建一个函数,它将1输入和“x”输入之间的所有数字与dotimes循环相乘。如果你愿意,请检查我的功能并说出错误,因为我不熟悉Scheme中的循环。
(define (product x)
(let ((result 1))
(dotimes (temp x)
(set! result (* temp (+ result 1))))
result))
答案 0 :(得分:5)
使用递归。这是在Scheme / Racket中做事的方法。并且尽量不要使用set!
和其他改变变量的函数,除非没有其他选择。
以下是Scheme中递归的教科书示例:
(define factorial
(lambda (x)
(if (<= x 1)
1
(* x (factorial (- x 1))))))