2009-06-12 12 views
8

Wie ich Schleife in PLT-Schema wie in Java-Loop in PLT Scheme

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

Dank musicfreak, ich lerne. Deshalb habe ich diese Frage gestellt :) Das Schema doc ist mir nicht klar. Aber ich denke, ich werde mich bald daran gewöhnen. – fireball003

+0

Okay, nur dafür sorgen, dass dies nicht eine dieser "mach meine Hausaufgaben für mich" -Dinge ist. :) Ich kenne Scheme aber nicht viel Glück! –

+2

Wenn es ein Hausaufgabenproblem wäre, würden Sie eher "Problem" als "Syntaxproblem" sehen. – fireball003

Antwort

14

Ihr Beispiel in Java Karte nicht direkt auf die Sprachregelung, die nur ein paar neue Keywords zu lernen, da es aren implementieren 't explizite Konstrukte zum Implementieren einer for-Schleife in Scheme (es sei denn, Sie schreiben selbst ein Konstrukt!). Der Kochbuch Weg, dies in Scheme zu tun, ist eine rekursive Funktion zu definieren, die eine Liste umläuft. Hier ist ein Beispiel dafür, wie eine for-Schleife Style-Funktion in Schema zu tun:

(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 

von dieser Seite genommen:

Guile and Scheme Links

Hier ist ein weiterer Link zu einer Seite, die die Ideen beschrieben, die Sie brauchen, um verstehen Schleifen von imperativen Sprachen Schema zu übersetzen:

Scheme Looping Constructs

Scheme ist ein wirklich interessante Sprache zu lernen, sollten Sie auch lesen Sie die Structure and Interpretation of Computer Programs, das ist das Lehrbuch früher für den Unterricht Scheme am MIT verwendet.

+0

Danke Mann. Dies ist eine große Hilfe :) – fireball003

+0

Kein Problem, es lässt mich liebevoll über meine positiven Erfahrungen mit Scheme in der Schule denken. Eine funktionale Sprache wie Scheme zu erlernen, kann Sie zu einem besseren Programmierer machen, etwas, das Ihnen hilft, über elegante Problemlösungen nachzudenken. Sobald Sie das Gefühl haben, dass Scheme beginnt, Sinn zu machen, empfehle ich eine andere "andere" Sprache, wie Prolog. Das ist anders als bei Scheme und Java und es kann dir verschiedene neue Dinge beibringen. Viel Glück. :) –

8

Das Iterationskonstrukt in Schema ist "do", Sie können es in der R5RS specification nachschlagen.

Das Beispiel du hast etwas würde wie folgt aussehen:

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

(do ...) ist etwas allgemeiner als das, was in diesem Beispiel zeigt sich. Sie können beispielsweise einen Wert zurückgeben, anstatt ihn nur für seine Nebenwirkungen zu verwenden. Es ist auch möglich, viele "Zähler" zu haben:

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

um klar zu sein, das zweite Beispiel mit zwei Schleifenvariablen wird schwierig sein, wenn Sie nicht darauf hinweisen, dass alle Variablen zur gleichen Zeit iteriert werden - ein "do" = eine Schleife. dieses Beispiel würde der C-Schleife "für (i = 0, j = 0;!stopp (i, j); i = i + 1, j = j + 2) {excrs();} return return_value; "Nun, im Grunde ist das richtig. Meistens. – Aaron

+0

Ja, das stimmt. Ich werde den Beitrag später bearbeiten und versuchen, die Dinge zu klären ein bisschen. – Jonas

13

In PLT Sie dies tun können:

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