Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Scheme-Problem mit Liste in do-Umgebung » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Scheme-Problem mit Liste in do-Umgebung
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
meep
unregistriert
Scheme-Problem mit Liste in do-Umgebung Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Liebe Foren-Mitglieder,

ich verwende eine spezielle Software namens MEEP zur Simulation photonischer Kristalle. Sie basiert auf Scheme. Da es in Scheme keine for-Schleife gibt, verwende ich zwei do-Befehle um eine doppelte Schleife zu erzeugen. Mein Problem ist dieser Code:

(list
(do ((j 0 (+ j 1))) ((> j (- cols 1)))
(do ((i 0 (+ i 1))) ((> i (- rows 1)))
(if (vector? (array-ref coords i j))
(make cylinder
(center (vector-ref (array-ref coords i j) 0) (vector-ref (array-ref coords i j) 1) 0)
(height high)
(radius rad)
(material air))
)
)
)
)

Dieser soll aus einem zuvor ertsellten Array coords, dessen Einträge jeweils Vektoren sind (x- und y-Koordinate), Zylinder für jedes Koordinaten-Paar erzeugen. Das Problem dabei ist die do-Schleife, denn dieser Code funktioniert:

(list
(if (vector? (array-ref coords 0 0))
(make cylinder
(center (vector-ref (array-ref coords 0 0) 0) (vector-ref (array-ref coords 0 0) 1) 0)
(height high)
(radius rad)
(material air))
)
(if (vector? (array-ref coords 1 0))
(make cylinder
(center (vector-ref (array-ref coords 1 0) 0) (vector-ref (array-ref coords 1 0) 1) 0)
(height high)
(radius rad)
(material air))
)
(if (vector? (array-ref coords 1 6))
(make cylinder
(center (vector-ref (array-ref coords 1 6) 0) (vector-ref (array-ref coords 1 6) 1) 0)
(height high)
(radius rad)
(material air))
)
)

Meine Ideen:
Wie kann ich das Problem lösen? Liegt es daran, dass ich in einer Listen-Umgebung keinen do-Befehl verwenden kann? Ich habe auch versucht den list-Befehl an eine andere Stelle zu schreiben und mit append die Listen zusammenzufügen. Auch ohne Erfolg.

Für Hilfe wäre ich sehr dankbar!
02.08.2011 13:30
meep
unregistriert
RE: Scheme-Problem mit Liste in do-Umgebung Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Vielleicht ist die Frage auch etwas zu spezifisch. Eine Problemlösung die ich gut finden würde, wäre so: ich übergebe einer Funktion eine leere Liste, und in der ober gezeigten doppelten do-Schleife werden dann Elemente zu dieser Liste hinzugefügt und die Liste zurückgegeben. Wie kann ich das machen? Es gibt ja keinen richtigen return-Befehl in scheme, oder? Kann da vielleicht jemand einen Tipp geben?

Vielen Dank!
02.08.2011 15:20
Lowl3v3l
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich würde mal versuchen das ganze per rekursion zu lösen, würde zumindest ich als Clojure-programmierer so machen, wie genau do in scheme funktioniert weiß ich ausm kopf leider nicht, aber für so schleifen-probleme ist Tail-recursion idR die eleganteste Lösung.



mfg
13.08.2011 09:30
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Scheme-Problem mit Liste in do-Umgebung