Ich brauche Hilfe zu Scheme
Hallo Leute,
kennt jemand gute Hilfe Seiten zu Scheme, oder kann mir evtl. selbst helfen?
Ich habe eine Zählvariable einer do Schleife und möchte diese Variable in einen vector setzen.
Doch ich erhalte immer eine Fehlermeldung: "do: unbound variable"
Ich kann die Variable nicht "so einfach" in den vector schreiben. Ich habe mit dem Programmieren in Scheme erst vorgestern etwas angefangen und habe die Syntax noch nicht ganz verstanden. Hat jemand einen Tipp für ein Hilfe Forum oder ähnliches oder kann mir mein Problem direkt erklären oder gar lösen?
Vielen Dank.
Hi,
also das mit der Variablen in Vektor habe ich mitlerweile gelöst. Aber für zukünftige Fragestellungen und dergleichen interessiere ich mich dennoch für ein Hilfe Forum und eine Turoial Seite etc. zu Scheme.
Wen es interessiert:
kennt jemand gute Hilfe Seiten zu Scheme, oder kann mir evtl. selbst helfen?
Ich habe eine Zählvariable einer do Schleife und möchte diese Variable in einen vector setzen.
Doch ich erhalte immer eine Fehlermeldung: "do: unbound variable"
Ich kann die Variable nicht "so einfach" in den vector schreiben. Ich habe mit dem Programmieren in Scheme erst vorgestern etwas angefangen und habe die Syntax noch nicht ganz verstanden. Hat jemand einen Tipp für ein Hilfe Forum oder ähnliches oder kann mir mein Problem direkt erklären oder gar lösen?
Vielen Dank.
Hi,
also das mit der Variablen in Vektor habe ich mitlerweile gelöst. Aber für zukünftige Fragestellungen und dergleichen interessiere ich mich dennoch für ein Hilfe Forum und eine Turoial Seite etc. zu Scheme.
Wen es interessiert:
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 |
(define xStart 0 )
(define xFinish 2 )
(define xIncrement 1 )
(do ;; x
( ;; Initialization
(xValue xStart (+ xValue xIncrement ))
)
( (> xValue xFinish ) xValue )
;; body
) ;; END do ;; x
|
danke fürs Lesen
Alludo Animali
Alludo Animali
Hallo Chenda,
mit der Sprache kann ich Dir nicht wirklich helfen, dementsprechend kann ich auch keine gute Seite zum Thema empfehlen
Hier im Forum hat sich bisher Einer dazu bekannt, das er die Programmiersprache Scheme kennt.
im Internet findet man einige Seiten zum Thema
zum Beispiel diese Seite: http://www.abyter.de/index.php?page=page2
in dem Forum wollten auch mal 2Leute Scheme lernen, allerdings wundert mich das da Dr.Scheme anfangs ein Programmiertool ist und am ende des Threads eine eigene Programmiersprache
in dem Forum gehts auch um Scheme lernen und man findet weiterführende Links.
auch interessant Gimp >> Fu-Skript >> Scheme
Viel Spaß beim stöbern und lesen
Gruß
Ego
mit der Sprache kann ich Dir nicht wirklich helfen, dementsprechend kann ich auch keine gute Seite zum Thema empfehlen

Hier im Forum hat sich bisher Einer dazu bekannt, das er die Programmiersprache Scheme kennt.
Ich habe neben PHP und Python auch Erfahrung mit anderen Sprachen wie Scheme, Clojure, Java, C und Erlang, aber in Python Programmiere ich wirklich am liebsten.
Wenn du noch weitere Fragen hast, stell sie ruhig und bohre nach wo ich nicht ausführlich genug geantwortet habe, denn ich weiß das es nicht ausführlich genug ist. Aber ich wollte auch möglichst Zeitnah antworten da ich sonnst warscheinlich gar nicht geantwortet hätte.
im Internet findet man einige Seiten zum Thema
zum Beispiel diese Seite: http://www.abyter.de/index.php?page=page2
in dem Forum wollten auch mal 2Leute Scheme lernen, allerdings wundert mich das da Dr.Scheme anfangs ein Programmiertool ist und am ende des Threads eine eigene Programmiersprache

in dem Forum gehts auch um Scheme lernen und man findet weiterführende Links.
auch interessant Gimp >> Fu-Skript >> Scheme
Viel Spaß beim stöbern und lesen

Gruß
Ego
Hallo Ego,
vielen Dank für deine Informationen.
Einige Seiten kannte ich schon, die Foren waren mir neu, haben aber ehrlich gesagt nicht wirklich weiter geholfen.
Vielleicht weiß jemand anderes ja noch Rat?
Für Einsteiger kann ich folgende Online Bücher empfehlen:
How to Design Programs An Introduction to Computing and Programming
Structure and Interpretation of Computer Programs
Teach Yourself Scheme in Fixnum Days
vielen Dank für deine Informationen.
Einige Seiten kannte ich schon, die Foren waren mir neu, haben aber ehrlich gesagt nicht wirklich weiter geholfen.
Vielleicht weiß jemand anderes ja noch Rat?
Für Einsteiger kann ich folgende Online Bücher empfehlen:
How to Design Programs An Introduction to Computing and Programming
Structure and Interpretation of Computer Programs
Teach Yourself Scheme in Fixnum Days
danke fürs Lesen
Alludo Animali
Alludo Animali
Deine Fragestellung verstehe ich nicht wirklich. Du sagst du Möchtest die Zählvariable in einem Vector haben. Ist es dein Ziel eine Liste der Form (1 2 3) zu bekommen? Denn das was du gepostet hast gibt 3 zurück (in R5RS).
Im allgemeinen ist Scheme auch nur ein Über-Name für eine Gruppe von Sprachen. Je nachdem welche genaue Abart du verwendest hast du da unterschiedliche Möglichkeiten und unterschiedliche vorgegebene Funktionen.
Im allgemeinen ist Scheme auch nur ein Über-Name für eine Gruppe von Sprachen. Je nachdem welche genaue Abart du verwendest hast du da unterschiedliche Möglichkeiten und unterschiedliche vorgegebene Funktionen.
ihre DNS Analyse zeigt eine krankhafte Abneigung gegen jegliche Autorität und einen Charakter der zum Gewaltausbrechen neigt....
Hi treo,
danke für deine Antwort.
Ich habe in dem Programmcode dort oben den Schleifenkörper nicht gepostet ;-)
mit dem Vektor (gvector) hatte ich ursprünglich Probleme. Durch die Def. der Variablen wie oben konnte ich das lösen.
Mit R5RS meinst du den Report ? Habe vergessen zu schreiben, dass ich den auch schon kenne, habe ihn aber noch nicht gelesen. Ist das zu empfehlen?
danke für deine Antwort.
Ich habe in dem Programmcode dort oben den Schleifenkörper nicht gepostet ;-)
|
|
Quellcode |
1 |
(raytrace:set-beam-orientation-euler-degrees (gvector xValue yValue zValue) "Grid Source 1") |
mit dem Vektor (gvector) hatte ich ursprünglich Probleme. Durch die Def. der Variablen wie oben konnte ich das lösen.
Mit R5RS meinst du den Report ? Habe vergessen zu schreiben, dass ich den auch schon kenne, habe ihn aber noch nicht gelesen. Ist das zu empfehlen?
danke fürs Lesen
Alludo Animali
Alludo Animali
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Chenda« (17. Februar 2011, 15:42)
Das ist auch ein Name für den Standard. Ich hatte es eben mit dem Standard als Sprache in Dr Scheme getestet was du da gepostet hast.
hi Treo,
ich benutze nicht Dr. Scheme, sondern "SchemeEdit 5.0 with DDE interface to TracePro"
Eventuell gibt es da dann auch unterschiede. Aber ich vermute, dass lediglich die Schleife auch bei mir "3" ergeben würde ;-)
Ich habe doch noch eine aktuelle Frage:
In einer datei möchte ich mehrere zahlen speichern (in einer Schleife).
Dabei sollen pro Zeile für ein x/y wertepaar die entsprechenden Ergebnisse stehen (getrennt durch Leerzeichen oder Tab).
Ich speichere das bisher mit dem (print) Kommando. Leider wird dann zu Beginn und am Ende einer Zeile jeweils ein Anführungsstrich geschrieben.
|
|
Quellcode |
1 |
(print (string-append (number->string xValue) (string #\space) (number->string yValue) (string #\space) (number->string my_read_1) (string #\space) (number->string my_read_2)) myOutputPort) |
Ergebnis:
"-35 -5 5.92635e-005 0.592635"
Nun möchte ich gerne nur die Zahlen ohne " haben. Weiß jemand wie das geht?
danke fürs Lesen
Alludo Animali
Alludo Animali
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Chenda« (18. Februar 2011, 09:04)
Da kann ich dir leider nicht helfen. Soweit ich es gefunden habe wird SchemeEdit für Chez Scheme verwendet, das hat aber (zumindest nach der Referenz die ich online dazu gefunden habe) keine (print) Funktion.
Und da ich zu der in TracePro benutzten Scheme Variante keine Infos finden kann, ist es praktisch unmöglich da eine Sinnvolle Hilfestellung zu geben.
In Chez Scheme würde man das ganze mit (block-write port string) (gegen Ende von Abschnitt 9.9, in Chez Scheme Version 8 User's Guide)machen.
Wenn man nach The Scheme Programming Language Abschnitt 7.8 geht, dann würde es mit (put-string textual-output-port string) gehen.
Und da ich zu der in TracePro benutzten Scheme Variante keine Infos finden kann, ist es praktisch unmöglich da eine Sinnvolle Hilfestellung zu geben.
In Chez Scheme würde man das ganze mit (block-write port string) (gegen Ende von Abschnitt 9.9, in Chez Scheme Version 8 User's Guide)machen.
Wenn man nach The Scheme Programming Language Abschnitt 7.8 geht, dann würde es mit (put-string textual-output-port string) gehen.
ihre DNS Analyse zeigt eine krankhafte Abneigung gegen jegliche Autorität und einen Charakter der zum Gewaltausbrechen neigt....
Hi treo,
danke für die Info. Also mit (put-string textual-output-port string) bin ich nicht weitergekommen, da ich ja noch irgendwie den textual-output-port als meine Datei definieren muss, was mir nicht gelungen ist.
Das prinzipielle Problem ist dass die Funktion "write" die Anführungszeichen nur generiert, da ich die Zahlen alle zu einem String zusammenfüge. tue ich das nicht funktioniert write nicht und ich erhalte keinen Output.
Hingegen kann ich mit (print value port) die entsprechenden Werte ohne Anführungsszeichen ausgeben. Dann jedoch wird nach jedem print ein Zeilenumbruch gemacht. Ich möchte aber erst nach dem x-ten print einen Zeilenumbruch, ansonsten nur Leerzeichen oder Tab, oder auch KOmma. Ich möchte die Ausgabe also formatieren.
Formatierte Ausgabe habe ich auch schon mit fprintf (siehe Abschn. 12.6)machen wollen (bekannt aus C++), aber da erhalte ich die Fehlermeldung.
EDIT:
Ich habe nun mit display versucht die Ausgabe zu machen:
Nun habe ich damit genau die gewünschte Formatierung erreicht. Das Problem ist nun aber, dass sämtliche display Befehle erst nach Ende des Makros ausgeführt werden. Das ist mir etwas zu riskant, denn da ist Datenverlust bei einer längeren Simulation durch einen Absturz o.ä. vorprogrammiert. Wie kann ich die Ausgabe direkt "erzwingen"?
danke für die Info. Also mit (put-string textual-output-port string) bin ich nicht weitergekommen, da ich ja noch irgendwie den textual-output-port als meine Datei definieren muss, was mir nicht gelungen ist.
Das prinzipielle Problem ist dass die Funktion "write" die Anführungszeichen nur generiert, da ich die Zahlen alle zu einem String zusammenfüge. tue ich das nicht funktioniert write nicht und ich erhalte keinen Output.
Hingegen kann ich mit (print value port) die entsprechenden Werte ohne Anführungsszeichen ausgeben. Dann jedoch wird nach jedem print ein Zeilenumbruch gemacht. Ich möchte aber erst nach dem x-ten print einen Zeilenumbruch, ansonsten nur Leerzeichen oder Tab, oder auch KOmma. Ich möchte die Ausgabe also formatieren.
Formatierte Ausgabe habe ich auch schon mit fprintf (siehe Abschn. 12.6)machen wollen (bekannt aus C++), aber da erhalte ich die Fehlermeldung.
|
|
Quellcode |
1 |
*** ERROR *** do: unbound variable: fprintf |
EDIT:
Ich habe nun mit display versucht die Ausgabe zu machen:
|
|
Quellcode |
1 2 3 4 5 6 7 8 |
(display xValue myOutputPort)
(display #\space myOutputPort)
(display yValue myOutputPort)
(display #\space myOutputPort)
(display (/ (raytrace:get-absorbed-flux (entity:get-by-name SurfaceName)) (raytrace:get-total-emitted-flux)) myOutputPort)
(display #\space myOutputPort)
(display (raytrace:get-absorbed-flux (entity:get-by-name SurfaceName)) myOutputPort)
(newline myOutputPort)
|
Nun habe ich damit genau die gewünschte Formatierung erreicht. Das Problem ist nun aber, dass sämtliche display Befehle erst nach Ende des Makros ausgeführt werden. Das ist mir etwas zu riskant, denn da ist Datenverlust bei einer längeren Simulation durch einen Absturz o.ä. vorprogrammiert. Wie kann ich die Ausgabe direkt "erzwingen"?
danke fürs Lesen
Alludo Animali
Alludo Animali
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Chenda« (22. Februar 2011, 13:53)
Sieht so aus als ob du nicht ein Standard Scheme hast. Ich habe jetzt auch schon einige Zeit damit verbracht nach einer Dokumentation davon zu Suchen, konnte aber bisher nichts finden.
Angeblich ist die Dokumentation irgendwo bei TracePro dabei, aber wie ich bereits sagte, online kann ich sie Leider nicht finden.
Angeblich ist die Dokumentation irgendwo bei TracePro dabei, aber wie ich bereits sagte, online kann ich sie Leider nicht finden.
ihre DNS Analyse zeigt eine krankhafte Abneigung gegen jegliche Autorität und einen Charakter der zum Gewaltausbrechen neigt....
hmm,
das sind keine "normalen" Scheme Befehle?
Die Dokumentation hilft mir leider nicht wirklich weiter.
Sie sagt zu (write)
(print)
(display)
Schade auch, dass da keine Beispiele angegeben werden.
das sind keine "normalen" Scheme Befehle?
Die Dokumentation hilft mir leider nicht wirklich weiter.
Sie sagt zu (write)
|
|
Quellcode |
1 2 3 4 5 6 7 8 |
Action: Prints obj to the specified port, if provided, or to the value returned by the procedure current-output-port, otherwise. Syntax: (write obj [output-port]) Arg Types: Returns: Returns an unspecified value. Errors: Description: Unlike the procedure display, write does not suppress the escaping of special characters, the double-quotes delimiting strings, or the #\-combination identifying characters. Limitations: Not applicable Example: |
(print)
|
|
Quellcode |
1 2 3 4 5 6 7 8 |
Action: Prints obj using write and then prints a newline. Syntax: (print obj [output-port]) Arg Types: Returns: print returns void. Errors: Description: If the second argument is omitted, it defaults to the current output port. Limitations: Not applicable Example: |
(display)
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Action: Prints a representation of obj to the specified port, if provided, or to the value returned by the procedure current-output-port, otherwise.
Syntax: (display obj [output-port])
Arg Types:
Returns: Returns an unspecified value.
Errors:
Description: The double-quotes that delimit strings are suppressed by this procedure, as is the escaping of any special characters that occur within a string.
In particular, this means that, if you subsequently use the procedure read to read data that have been written out using the procedure display,
any space characters belonging to displayed strings, whether they are escaped or not, will be interpreted as delimiters between representations
of Scheme objects. To avoid this behavior, use the procedure write instead. display also suppresses the #\-combination that identifies characters,
printing only the actual character itself. Similarly, it prints named characters themselves rather than their names. Thus, (display #\space) writes
an actual space character?not the symbol #\space?to the current output port.
Limitations: Not applicable
Example:
|
Schade auch, dass da keine Beispiele angegeben werden.
danke fürs Lesen
Alludo Animali
Alludo Animali
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Chenda« (10. März 2011, 09:57)
Die Dokumentation die du hier gepostet hast sagt aus das es Objekte in Scheme Representation schreibt, d.h. das du durch (read) wieder die Original Objekte bekommen würdest.
Hast du eine Möglichkeit die ganze Dokumentation irgendwie zu posten?
Hast du eine Möglichkeit die ganze Dokumentation irgendwie zu posten?
ihre DNS Analyse zeigt eine krankhafte Abneigung gegen jegliche Autorität und einen Charakter der zum Gewaltausbrechen neigt....
Die Dokumentation die du hier gepostet hast sagt aus das es Objekte in Scheme Representation schreibt, d.h. das du durch (read) wieder die Original Objekte bekommen würdest.
Hast du eine Möglichkeit die ganze Dokumentation irgendwie zu posten?
Hi treo, ich habe die Datei einmal hochgeladen
Du kannst die Hilfe Datei hier direkt herunterziehen:
http://www.alludo-animali.de/files/scheme_hilfe.rar
danke fürs Lesen
Alludo Animali
Alludo Animali
Sehr gut. Das Scheme das du verwendest ist also Elk Scheme (http://www-rn.informatik.uni-bremen.de/software/elk/).
In der Dokumentation steht jetzt nicht dabei das (display) wartet bis das ganze zu Ende ist. Daher denke ich, dass das Verhalten das du siehst durch das Implizite Schließen des Output Ports geschieht. Wenn du also nach jedem (display) möchtest das es das in deine Ausgabedatei geschrieben wird, dann solltest du (flush-output-port) aufrufen damit der Buffer in den (display) schreibt geleert wird.
In der Dokumentation steht jetzt nicht dabei das (display) wartet bis das ganze zu Ende ist. Daher denke ich, dass das Verhalten das du siehst durch das Implizite Schließen des Output Ports geschieht. Wenn du also nach jedem (display) möchtest das es das in deine Ausgabedatei geschrieben wird, dann solltest du (flush-output-port) aufrufen damit der Buffer in den (display) schreibt geleert wird.
ihre DNS Analyse zeigt eine krankhafte Abneigung gegen jegliche Autorität und einen Charakter der zum Gewaltausbrechen neigt....
Sehr gut. Das Scheme das du verwendest ist also Elk Scheme (http://www-rn.informatik.uni-bremen.de/software/elk/).
In der Dokumentation steht jetzt nicht dabei das (display) wartet bis das ganze zu Ende ist. Daher denke ich, dass das Verhalten das du siehst durch das Implizite Schließen des Output Ports geschieht. Wenn du also nach jedem (display) möchtest das es das in deine Ausgabedatei geschrieben wird, dann solltest du (flush-output-port) aufrufen damit der Buffer in den (display) schreibt geleert wird.
hi treo,
vielen Dank für deine Hilfe. Klappt wunderbar.
Eine andere Frage:
Ich habe eine Schleife zur Verallgemeinerung geschrieben:
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 |
(do ( (surfValue nIncr (+ surfValue nIncr)) ) ( (> surfValue numberofSurf) surfValue) (display #\space myOutputPort) (display (/ (raytrace:get-absorbed-flux (entity:get-by-name (string-append SurfaceName (number->string numberofSurf)))) (raytrace:get-total-emitted-flux)) myOutputPort) (flush-output-port myOutputPort) );;END do ;; Surface (newline myOutputPort) |
Das Problem ist hier, dass für jeden Aufruf der Wert des letzten Schleifenaufrufs gespeichert wird. Das macht doch keinen Sinn...
Erst dachte ich es könnte daran liegen, dass er den Wert nicht direkt schreibt sondern buffert, aber auch mit dem (flush-output-port) besteht das Problem noch.
Für den Fall der Schleife über 3 Werte funktioniert das im folgenden Einzelaufruf:
|
|
Quellcode |
1 2 3 4 5 6 7 8 |
(display #\space myOutputPort) (display (/ (raytrace:get-absorbed-flux (entity:get-by-name SurfaceName1)) (raytrace:get-total-emitted-flux)) myOutputPort) (display #\space myOutputPort) (display (/ (raytrace:get-absorbed-flux (entity:get-by-name SurfaceName2)) (raytrace:get-total-emitted-flux)) myOutputPort) (display #\space myOutputPort) (display (/ (raytrace:get-absorbed-flux (entity:get-by-name SurfaceName3)) (raytrace:get-total-emitted-flux)) myOutputPort) (newline myOutputPort) (flush-output-port myOutputPort) |
Woran könnte das liegen?
Die Ausgabe sieht bei der Schleife so aus:
|
|
Quellcode |
1 |
2.12552618182099e-007 2.12552618182099e-007 2.12552618182099e-007 |
und beim Einzelaufruf lautet die Ausgabe korrekt:
|
|
Quellcode |
1 |
0.000589607675388093 2.30244797729298e-007 2.12552618182099e-007 |
Ersichtlich ist, dass bei der Schleife der letzte Schleifenwert dreimal gespeichert wird...?
danke fürs Lesen
Alludo Animali
Alludo Animali
|
|
Quellcode |
1 |
(entity:get-by-name (string-append SurfaceName (number->string numberofSurf))) |
|
|
Quellcode |
1 |
(entity:get-by-name SurfaceName1) |
Das ist der Teil der sich durch die Schleife ändert.
Du könntest einfach mal probieren zu schauen ob (string-append SurfaceName (number->string numberofSurf)) == SurfaceName1 ist wenn numberofSurf 1 ist, denn so wie es aussieht wird in der Schleifen-Variante der Wert an dieser Stelle nicht richtig berechnet.
ihre DNS Analyse zeigt eine krankhafte Abneigung gegen jegliche Autorität und einen Charakter der zum Gewaltausbrechen neigt....
Ähnliche Themen
-
Newbies »-
brauche hilfe
(2. September 2004, 12:18)
-
Plauder Forum »-
Brauche Hausi-Hilfe
(19. April 2004, 17:21)
-
Games »-
Cs Problem
(29. August 2003, 20:06)
-
PHP »-
Brauche kurz Hilfe
(12. April 2003, 20:22)
-
Werbeformen für Webseiten / Geldverdienen mit Werbung »-
Brauche dringend Hilfe!!!
(5. April 2003, 20:57)



. Aber ich wollte auch möglichst Zeitnah antworten da ich sonnst warscheinlich gar nicht geantwortet hätte.