2011-06-10 23 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

相關問題