2011-06-10 53 views
3

我正在做一个函数,它将1个输入和一个“x”输入之间的所有数字乘以dotimes循环。如果您愿意,请检查我的功能并说出错,因为我不熟悉Scheme中的循环。如何创建一个将所有数字在1和“x”之间乘以dotime的函数?

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

计划没有'dotimes'(其中,IIRC,是Common Lisp的东西)。 – 2011-06-10 20:02:58

+0

我学习了dotimes方案,并且我可以构建dotimes cicles,在球拍(plt-scheme) – gn66 2011-06-10 20:09:07

+2

嗯,你刚刚问了[几乎相同的问题](http://stackoverflow.com/questions/6311057/scheme-how-以创建 - 一个功能 - 即周期乘法 - 全数字之间-A型和b型)。 – 2011-06-10 20:20:57

回答

5

使用递归。这是在计划/球拍中做事的方式。并且尽量不要使用set!和其他改变变量的函数,除非没有别的选择。

下面是递归的典型例子方案:

(define factorial 
    (lambda (x) 
    (if (<= x 1) 
     1 
     (* x (factorial (- x 1)))))) 
+0

我同意。如果你正在使用set!在你的计划/球拍生涯的早期,你正在击败目标,更重要的是,错过了这一点。 – yarian 2011-06-15 18:29:06

相关问题