Scheme 如何创建一个将1和“1”之间的所有数字相乘的函数;x";有时间吗?

Scheme 如何创建一个将1和“1”之间的所有数字相乘的函数;x";有时间吗?,scheme,racket,Scheme,Racket,我在做一个函数,用dotimes循环将1输入和x输入之间的所有数字相乘。若你们愿意的话,请检查我的函数,并说明出了什么问题,因为我对方案中的循环不太了解 (define (product x) (let ((result 1)) (dotimes (temp x) (set! result (* temp (+ result 1)))) result)) 使用递归。这是做事情的方法。不要使用set和其他更改变量的函数,除非真的没有其

我在做一个函数,用dotimes循环将1输入和x输入之间的所有数字相乘。若你们愿意的话,请检查我的函数,并说明出了什么问题,因为我对方案中的循环不太了解

(define (product x)
  (let ((result 1))
        (dotimes (temp x)
                 (set! result (* temp (+ result 1))))
    result))

使用递归。这是做事情的方法。不要使用
set
和其他更改变量的函数,除非真的没有其他选择

下面是Scheme中递归的教科书示例:

(define factorial
  (lambda (x)
    (if (<= x 1)
        1
        (* x (factorial (- x 1))))))
(定义阶乘)
(λ(x)

(如果(Scheme)没有
dotimes
(IIRC,这是一种常见的Lisp语言)。我用dotimes学习Scheme,我可以在racket(plt Scheme)中构造dotimes cicles,你刚才问过。我同意。如果你在Scheme/racket职业生涯的早期使用set!你正在挫败目标,更重要的是,没有抓住要点。