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++;
}
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++;
}
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:
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 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.
Danke Mann. Dies ist eine große Hilfe :) – fireball003
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. :) –
Ich schlage vor, Sie zu Michele Simionatos "The adventures of a pythonista in schemeland" zu sehen. Es ist für Python-> Schema, aber es ist wirklich gut geschrieben und, was noch wichtiger ist, es ist von prozeduralen-> funktional.
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...)
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
Ja, das stimmt. Ich werde den Beitrag später bearbeiten und versuchen, die Dinge zu klären ein bisschen. – Jonas
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))
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
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! –
Wenn es ein Hausaufgabenproblem wäre, würden Sie eher "Problem" als "Syntaxproblem" sehen. – fireball003