2013-04-22 48 views
1

嵌套循環我新的計劃,我想創建嵌套循環用C,其代碼如下所示: -如何創建方案

for(i = -1, a = 0; i > -5, a < 5; i--, a++) 
{ 
    for(j = i, b = 0; j < (abs(i)), b < 5; j++, b++) 
    { 
     <do something> 
    } 
} 

我想在這個概念方案類似的事情: -

(let oloop((i -1) (a 0)) 
      (display i)(display a) (newline) 
      (if (and (> i -5) (< a 5)) (oloop((- i 1) (+ a 1)))))) 

我無法嵌套所有四個循環加上面的代碼不工作。

請建議。

回答

6

的一種方法是使用do循環結構,它需要3個參數:變量綁定(與初始值,並且更新的形式),則終止條件,並且主體的形式:

(do ((i -1 (- i 1))    ; Count i downwards from -1 
    (a 0 (+ a 1)))    ; Cound a upwards from 0 
    ((or (= i -5) (= a 5)))  ; Stop when i = -5 or a = 5 
    ;; Body of outer loop 
    (do ((j i (+ j 1))    ; Count j upwards from i 
     (b 0 (+ b 1)))    ; Count b upwards from 0 
     ((or (= (abs i) j) (= b 5))) ; Stop when j = abs(j) or b = 5 
    ;; Body of inner loop: Do something 
    )) 

如果你堅持用遞歸做的,使用命名讓,這是可以做到這樣的,有缺點,即更新變量的形式遠離初始化和終止形式:

(let outer ((i -1) (a 0)) 
    (if (and (> i -5) (< a 5)) 
     (begin 
     (let inner ((j i) (b 0)) 
      (if (and (< j (abs i)) (< b 5)) 
       (begin 
       ; Do something 
       ; then loop 
       (inner (+ j 1) (+ b 1))))) 
     (outer (- i 1) (+ a 1))))) 
0

您的Scheme示例中的i--的等效項目在哪裏?

(+ i 1) 

我對我的計劃有點生疏,但我不認爲就是這樣。

此外,我不確定你從C程序中獲得這個基本情況的位置?寫這些嵌套的循環

(< i 10) 
+0

這是錯誤的發佈問題 – neham 2013-04-22 05:50:28

+0

現在糾正...我剛剛搞亂了循環。 – neham 2013-04-22 05:53:59

+0

j <(abs(i)需要一個括號,而且,我不是一個真正的C程序員,但是那個條件j <(abs(i))永遠不會滿足嗎?我是否正確? – 2013-04-22 05:58:00

0

如果您使用的是Racket,使用iterations and comprehensions有一種非常直接的方式來實現C風格的循環。代碼看起來幾乎相同:

(for [(i (in-range -1 -5 -1)) 
     (a (in-range 0 5))] 
    ; body of the outer loop 
    ; do something with i a 
    (for [(j (in-range i (abs i))) 
     (b (in-range 0 5))] 
    ; body of the inner loop 
    ; do something with i a j b 
    (display (list i a j b)))) 
相關問題