Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme 如何创建一个将1和“1”之间的所有数字相乘的函数;x";有时间吗?_Scheme_Racket - Fatal编程技术网

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!你正在挫败目标,更重要的是,没有抓住要点。