2009-06-12 70 views
8

我怎樣才能實現PLT-方案循環像Java的循環中PLT的計劃

for(int i=0;i<10;){ 
    for(int j=0;j<3;){ 
      System.out.println(""+j); 
      j++; 
    } 
     System.out.println(""+i); 
     i++; 
} 
+1

感謝musicfreak,我學習它。這就是爲什麼我問這個問題:)方案文件不清楚給我。但我認爲我很快就會習慣它。 – fireball003 2009-06-12 05:56:41

+0

好吧,只要確保這不是那些「爲我做作業」的東西。 :)我不知道計劃,但祝你好運! – 2009-06-12 05:58:36

+2

如果這是一個家庭作業問題,那麼你會看到「問題」而不是「語法問題」。 – fireball003 2009-06-12 06:01:04

回答

14

你在Java的例子並不直接由剛學了幾個新的關鍵字,因爲AREN映射到Scheme語言在Scheme中實現for循環的顯式構造(除非你自己寫一個構造!)。 Cookbook在Scheme中的做法是定義一個循環遍歷列表的遞歸函數。這裏有一個如何在流程做一個for循環式的函數的一個例子:

(define (doit x x-max dx) 
    (if (<= x x-max) 
    (begin 
     ;;...perform loop body with x... 
     (doit (+ x dx) x-max dx)))) 

(doit a b dx) ; execute loop from a to b in steps of dx 

從該頁面摘自:

Guile and Scheme Links

這裏的另一個鏈接描述你需要的想法到一個頁面瞭解從命令式語言翻譯循環方案:

Scheme Looping Constructs

計劃是一個真正有趣的語言學習,你還應該閱讀Structure and Interpretation of Computer Programs,這是以前用於麻省理工學院教學計劃的教科書。

8

Scheme中的迭代構造是「do」,您可以在R5RS specification中查找它。

你給會看起來像這樣的例子:

(do ((i 0 (+ i 1))) ((> i 9)) 
    (do ((j 0 (+ j 1))) ((> j 2)) 
    (display j) 
    (newline)) 
    (display i) 
    (newline)) 

(do ...)有點比這個例子中顯示的內容比較一般。你可以例如讓它返回一個值,而不是僅僅爲了副作用而使用它。也可以有許多 「櫃檯」:

(do ((i 0 (+ i 1) 
    (j 0 (+ j 2)) 
    ((stop? i j) <return-value>) 
    exprs...) 
13

在PLT,你可以這樣做:

(for ([i (in-range 10)]) 
    (for ([j (in-range 3)]) (printf "~s\n" j)) 
    (printf "~s\n" i))