Scheme in Eclipse
Scheme in Eclipse
Hallo, ich würde gerne mal wissen wie man es genau schafft das Scheme-Plugin
http://sourceforge.net/projects/schemeway
in Eclipse so einzubinden, dass man auf DrScheme verzichten kann.
Ich verstehe nicht was man mit der .jar-Datei tun muss, damit es klappt wie ich es mir erhoffe.
http://sourceforge.net/projects/schemeway
in Eclipse so einzubinden, dass man auf DrScheme verzichten kann.
Ich verstehe nicht was man mit der .jar-Datei tun muss, damit es klappt wie ich es mir erhoffe.
Eclipse-Plugins lassen sich am einfachsten über Update-Seiten installieren.
Allerdings ist die von diesem Schemeway etwas versteckt:
http://schemeway.sourceforge.net/update-site/
Zum installieren:
Help->Software Updates->Find and Install...
Search for new features to install.
New Remote Site...
Daten eintragen
am entsprechenden Eintrag das Häckchen setzen
Finish
Konnte das ganze auf die Art zwar instaliert bekommen, allerdings läuft es nicht.
Wird aber daran liegen, dass ich nicht die neuste Eclipse-Version installiert habe.
Unbedingt beachten:
Stell möglicht den Scheme-Interpreter von DrScheme als externen Interpreter ein und nutz diesen.
Scheme wird immer noch weiter entwickelt (auch wenns viele nicht glauben mögen
) Daher ist fraglich ob das Verhalten der dort mitgelieferten Interpreter das gleiche ist.
Was mir nicht ganz klar ist, ist welche Möglichkeiten man dort zum Einbinden von Teachpacks und Einstellen des Sprachlevels hat.
Kannst ja mal von deinen Erfahungen berichten.
Allerdings ist die von diesem Schemeway etwas versteckt:
http://schemeway.sourceforge.net/update-site/
Zum installieren:
Help->Software Updates->Find and Install...
Search for new features to install.
New Remote Site...
Daten eintragen
am entsprechenden Eintrag das Häckchen setzen
Finish
Konnte das ganze auf die Art zwar instaliert bekommen, allerdings läuft es nicht.
Wird aber daran liegen, dass ich nicht die neuste Eclipse-Version installiert habe.
Unbedingt beachten:
Stell möglicht den Scheme-Interpreter von DrScheme als externen Interpreter ein und nutz diesen.
Scheme wird immer noch weiter entwickelt (auch wenns viele nicht glauben mögen

Was mir nicht ganz klar ist, ist welche Möglichkeiten man dort zum Einbinden von Teachpacks und Einstellen des Sprachlevels hat.
Kannst ja mal von deinen Erfahungen berichten.
Ich habe das jetzt mit den Anweisungen hier installiert, also das SCHEMEWAY 
Hab erstmal über elp -> Software Updates mein ECLIPSE auf den neusten Stand gebracht und dann über dieses schemeway-update-site nochmal das Scheme-Plugin installier. Es wird nun angezeigt und ich kann jetzt endlich auch Schemedateien öffnen und den Quellcode editieren und in Eclipse anzeigen. Leider nicht sowas wie "TESTBOXES"
...weiss nicht ob das möglich ist, hat jemand was diesbezüglich über SCHEMEWAY gefunden?
Was mir noch nicht gelungen ist, ist es irgendwie den SCHEME-CODE dann auch über Eclipse auszuführen. Weder über dieses Schemeway, was doch ein Interpreter sein soll... noch über DrScheme als externes einbinden.
Das einzige was mir irgendwie gelungen ist, ist dass bei Doppelklick in Eclipse, auf die geöffnete Scheme-Datei dann DrScheme gestartet wird... was nicht Sinn der Sache ist.
Ist schon jemand weitergekommen oder hat einen idee?

Hab erstmal über elp -> Software Updates mein ECLIPSE auf den neusten Stand gebracht und dann über dieses schemeway-update-site nochmal das Scheme-Plugin installier. Es wird nun angezeigt und ich kann jetzt endlich auch Schemedateien öffnen und den Quellcode editieren und in Eclipse anzeigen. Leider nicht sowas wie "TESTBOXES"

Was mir noch nicht gelungen ist, ist es irgendwie den SCHEME-CODE dann auch über Eclipse auszuführen. Weder über dieses Schemeway, was doch ein Interpreter sein soll... noch über DrScheme als externes einbinden.
Das einzige was mir irgendwie gelungen ist, ist dass bei Doppelklick in Eclipse, auf die geöffnete Scheme-Datei dann DrScheme gestartet wird... was nicht Sinn der Sache ist.
Ist schon jemand weitergekommen oder hat einen idee?

Also...
Von diesen Testboxen würde ich eh abraten, irgendwie sind die recht fehleranfällig und ich hab schon mehrfach erlebt, dass sie eine Datei unbrauchbar gemacht haben. Und da es dann keine Textdatei mehr ist, ist diese dann ganz hinüber.
Zu Schemeway: Bei einem Doppelklick auf die Datei versucht er diese zu öffnen, wenn er der Meinung ist das wäre nötig nimmt er dazu ein externes Programm (System-Editor). Hast du mal diesen Run-Interpreter Button benutzt?
Von diesen Testboxen würde ich eh abraten, irgendwie sind die recht fehleranfällig und ich hab schon mehrfach erlebt, dass sie eine Datei unbrauchbar gemacht haben. Und da es dann keine Textdatei mehr ist, ist diese dann ganz hinüber.
Zu Schemeway: Bei einem Doppelklick auf die Datei versucht er diese zu öffnen, wenn er der Meinung ist das wäre nötig nimmt er dazu ein externes Programm (System-Editor). Hast du mal diesen Run-Interpreter Button benutzt?
So, ich bin nun schon ein wenig weiter 
ALSO:
- Über Help->Software Updates->Find and Install...
--> Eclipse auf die neuste Version updaten.
- Über Help->Software Updates->Find and Install...
->Search for new features to install.
->New Remote Site...
->http://schemeway.sourceforge.net/update-site/
--> Scheme installieren und Eclipse neu starten.
- Über Window->Open Perspective->Other...
-> Scheme
--> Auswählen und dann erscheint ein SCHEME-Menü in der Leiste.
- Über F9 bzw dieses Menü kann dann die Konsole für den
Scheme-Interpreter geöffnet werden und mit der Maus kann man
sich diesen dann dort "hinziehen" wo man ihn haben möchte
Noch was:
- Über Window->Preferences->Scheme
--> Dort kann man sich die FARBEN einstellen für Scheme-Wörter,
Klammern, Kommentare, etc...
MEIN PROBLEM:
Ich bekomme nicht heraus wie ich nun mein Schemeprogramm
laufen lasse und es Code produziert
Wäre cool, wenn jemand sich auch mal dran versucht und falls er
es hinbekommt ne Rückmeldung liefert
*g*
(vom Typ "sinnvolle Antwort)

ALSO:
- Über Help->Software Updates->Find and Install...
--> Eclipse auf die neuste Version updaten.
- Über Help->Software Updates->Find and Install...
->Search for new features to install.
->New Remote Site...
->http://schemeway.sourceforge.net/update-site/
--> Scheme installieren und Eclipse neu starten.
- Über Window->Open Perspective->Other...
-> Scheme
--> Auswählen und dann erscheint ein SCHEME-Menü in der Leiste.
- Über F9 bzw dieses Menü kann dann die Konsole für den
Scheme-Interpreter geöffnet werden und mit der Maus kann man
sich diesen dann dort "hinziehen" wo man ihn haben möchte

Noch was:
- Über Window->Preferences->Scheme
--> Dort kann man sich die FARBEN einstellen für Scheme-Wörter,
Klammern, Kommentare, etc...
MEIN PROBLEM:
Ich bekomme nicht heraus wie ich nun mein Schemeprogramm
laufen lasse und es Code produziert

Wäre cool, wenn jemand sich auch mal dran versucht und falls er
es hinbekommt ne Rückmeldung liefert

(vom Typ "sinnvolle Antwort)

Also sowohl KAWA als auch SISC klappt wenn man ihn im Scheme-Menü
auswählt und dann mit F9 startet.
Man kann genau wie in DrScheme dann in der Konsole zb.:
(+ 1 1) eingeben und der Interpreter liefert 2
SISC ist mir sympathischer, weil die Fehlermeldungen mir besser gefallen,
aber KAWA öffnet so eine komische "Stack Trace"Ansicht wenn man will.
Leider verstehe ich nicht was die bringt, aber möglicherweise wird das
einleuchtender, wenn man herausbkeommt wie man seinen normalen
PROGRAMM-CODE ausführt *g*
auswählt und dann mit F9 startet.
Man kann genau wie in DrScheme dann in der Konsole zb.:
(+ 1 1) eingeben und der Interpreter liefert 2

SISC ist mir sympathischer, weil die Fehlermeldungen mir besser gefallen,
aber KAWA öffnet so eine komische "Stack Trace"Ansicht wenn man will.
Leider verstehe ich nicht was die bringt, aber möglicherweise wird das
einleuchtender, wenn man herausbkeommt wie man seinen normalen
PROGRAMM-CODE ausführt *g*
OK, also wenn ich im SCHEME-QUELLTEXT "rechtsklicke" kann ich aus dem
Kontextmenü
- EVAL->Load File in Interpreter
auswählen.
Leider kommt es dabei zu Fehlermeldungen
Wenn ich SISC INTERPRETER als Interpreter auswähle, dann folgendes:
Meine Vermutung: Wenn ich auf das HÖCHSTE Sprachlevel Stelle, dann
kennt DrScheme die Sonderform "define-struct" nicht mehr.
EDGE ist bei mir ein "define-struct".
Wenn ich EMBEDDED KAWA als Interpreter auswähle, dann folgendes:
Meine Vermutung: Wird wahrscheinlich der gleiche Fehler sein wie
beim SISC-Interpreter, nur eben ist die Fehlermeldung im ersten
Momentn icht besonderes "sprechend"
*g*
Ich vermute man muss seine Programme so schreiben, dass sie unter
DrScheme in folgendem Modus lauffähig sind:
Essentials of Programming Language (2nd Edition)
Kontextmenü
- EVAL->Load File in Interpreter
auswählen.
Leider kommt es dabei zu Fehlermeldungen

Wenn ich SISC INTERPRETER als Interpreter auswähle, dann folgendes:
Code: Alles auswählen
Error in load: evaluation error at file:C:/Dokumente und Einstellungen/alex/Desktop/workspace/Scheme/5-7-graphs-eclipse.scm:1:1
Caused by Error: undefined variable 'edge'.
file:C:/Dokumente und Einstellungen/alex/Desktop/workspace/Scheme/5-7-graphs-eclipse.scm:63:1: <indeterminate call>
kennt DrScheme die Sonderform "define-struct" nicht mehr.
EDGE ist bei mir ein "define-struct".
Wenn ich EMBEDDED KAWA als Interpreter auswähle, dann folgendes:
Code: Alles auswählen
gnu.mapping.UnboundLocationException: Unbound symbol define-struct
at gnu.expr.ReferenceExp.eval(ReferenceExp.java:107)
at gnu.expr.Expression.apply(Expression.java:35)
at gnu.mapping.CallContext.runUntilDone(CallContext.java:251)
at gnu.mapping.CallContext.getFromContext(CallContext.java:280)
at gnu.expr.Expression.eval(Expression.java:45)
at gnu.expr.ApplyExp.apply(ApplyExp.java:65)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:156)
at kawa.Shell.run(Shell.java:229)
at kawa.standard.load.loadSource(load.java:149)
at kawa.standard.load.loadSource(load.java:119)
at kawa.standard.load.apply(load.java:225)
at kawa.standard.load.apply2(load.java:188)
at kawa.standard.load.apply1(load.java:178)
at gnu.mapping.Procedure.apply(Procedure.java:133)
at gnu.mapping.Procedure.apply(Procedure.java:116)
at gnu.mapping.CallContext.runUntilDone(CallContext.java:251)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:222)
at org.schemeway.plugins.schemescript.interpreter.KawaProcess.eval(KawaProcess.java:169)
at org.schemeway.plugins.schemescript.interpreter.KawaProcess$1.run(KawaProcess.java:61)
at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:152)
at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:28)
at org.eclipse.swt.widgets.Display.syncExec(Display.java:3763)
at org.schemeway.plugins.schemescript.interpreter.KawaProxy.runInSchemeThread(KawaProxy.java:76)
at org.schemeway.plugins.schemescript.interpreter.KawaProcess$KawaStreamsProxy.write(KawaProcess.java:59)
at org.schemeway.plugins.schemescript.interpreter.KawaProcess.sendToInterpreter(KawaProcess.java:137)
at org.schemeway.plugins.schemescript.interpreter.AbstractInterpreter.eval(AbstractInterpreter.java:80)
at org.schemeway.plugins.schemescript.interpreter.AbstractInterpreter.load(AbstractInterpreter.java:85)
at org.schemeway.plugins.schemescript.action.LoadFileAction.run(LoadFileAction.java:32)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:499)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:539)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:488)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:400)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:928)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3348)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2968)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1914)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1878)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:419)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:95)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
at org.eclipse.core.launcher.Main.run(Main.java:977)
at org.eclipse.core.launcher.Main.main(Main.java:952)
beim SISC-Interpreter, nur eben ist die Fehlermeldung im ersten
Momentn icht besonderes "sprechend"

Ich vermute man muss seine Programme so schreiben, dass sie unter
DrScheme in folgendem Modus lauffähig sind:
Essentials of Programming Language (2nd Edition)
Ich hab's !
Und zwar durch Zufall
Ich wollte nen Java-Shortcut ändern - da fielen mir die Scheme-Shortcuts auf....
Also um eine scm-Datei in den Interpreter zu laden: STRG + SHIFT + L
Damit werden die Definitionen in den Interpreter geladen. (vorher die scm-Datei speichern)
Im Gegensatz zu Dr.Scheme werden die Befehle in der Datei aber nicht ausgeführt.
Dazu setzt man den Cursor hinter einen Aufruf, den man ausführen möchte und drückt STRG + Enter.
Das heißt man muss nicht wie in Scheme immer die Befehle auskommentieren, die gerade nicht ausgeführt werden sollen.
edit:
@Twister11: Vielleicht muss man structs in KAWA und SISC ja anders definieren
Und zwar durch Zufall

Also um eine scm-Datei in den Interpreter zu laden: STRG + SHIFT + L
Damit werden die Definitionen in den Interpreter geladen. (vorher die scm-Datei speichern)
Im Gegensatz zu Dr.Scheme werden die Befehle in der Datei aber nicht ausgeführt.
Dazu setzt man den Cursor hinter einen Aufruf, den man ausführen möchte und drückt STRG + Enter.
Das heißt man muss nicht wie in Scheme immer die Befehle auskommentieren, die gerade nicht ausgeführt werden sollen.
edit:
@Twister11: Vielleicht muss man structs in KAWA und SISC ja anders definieren

Ach und was das PRoblem mit den TEST-BOXEN angeht, da habe ich mir schon eine Lösung überlegt... wobei die sicherlich noch Ausbaufähig ist *g*
Code: Alles auswählen
;############################
;## TESTS ##
;############################
(define (works? description testcase shouldbe)
(cond
[(equal? testcase shouldbe) (string-append "WORKS: " description)]
[else (string-append "DOESNT WORK: " description)]))
;; Sample graph:
(define mygraph
(list (make-edge 'A 1 'A)
(make-edge 'A 1 'B)
(make-edge 'A 5 'D)
(make-edge 'B 2 'C)
(make-edge 'C 1 'D)
(make-edge 'C 5 'E)
(make-edge 'D 2 'E)
(make-edge 'E 1 'F)
(make-edge 'F 2 'G)
(make-edge 'G 2 'D)
(make-edge 'H 3 'H)
(make-edge 'B 3 'I)
(make-edge 'I 3 'J)
(make-edge 'J 3 'B)))
;; 1. (neighbors)
(works? "(neighbors 'C mygraph) -> (list 'D 'E)"
(neighbors 'C mygraph) (list 'D 'E)) ; should work
;; 2. (find-route)
(works? "(find-route 'B 'D mygraph) -> (list 'B 'C 'D)"
(find-route 'B 'D mygraph) (list 'B 'C 'D)) ; should work
(works? "(find-route 'B 'D mygraph) -> (list 'B 'C 'E 'F 'G 'D)"
(find-route 'B 'D mygraph) (list 'B 'C 'E 'F 'G 'D)) ; should work
(works? "(find-route 'B 'D mygraph) -> (list 'B 'I 'J 'B 'C 'D)"
(find-route 'B 'D mygraph) (list 'B 'I 'J 'B 'C 'D)) ; should NOT work (contains cycle)
(works? "(find-route 'A 'E mygraph) -> (list 'A 'B 'C 'D 'E)"
(find-route 'A 'E mygraph) (list 'A 'B 'C 'D 'E)) ; should work
(works? "(find-route 'A 'E mygraph) -> (list 'A 'B 'C 'E)"
(find-route 'A 'E mygraph) (list 'A 'B 'C 'E)) ; should work
(works? "(find-route 'A 'E mygraph) -> (list 'A 'D 'E)"
(find-route 'A 'E mygraph) (list 'A 'D 'E)) ; should work
(works? "(find-route 'A 'E mygraph) -> (list 'A 'A 'B 'C 'E)"
(find-route 'A 'E mygraph) (list 'A 'A 'B 'C 'E)) ; should NOT work (contains cycle)
(works? "(find-route 'A 'E mygraph) -> (list 'A 'B 'I 'J 'B 'C 'E)"
(find-route 'A 'E mygraph) (list 'A 'B 'I 'J 'B 'C 'E)) ; should work
(works? "(find-route 'D 'D mygraph) -> (list 'D)"
(find-route 'D 'D mygraph) (list 'D)) ; should work (Identical start- and endnode)
(works? "(find-route 'H 'H mygraph) -> (list 'H)"
(find-route 'H 'H mygraph) (list 'H)) ; should work
(works? "(find-route 'H 'H mygraph) -> (list 'H 'H)"
(find-route 'H 'H mygraph) (list 'H 'H)) ; should NOT work
;; 3. (get-distance)
(works? "(get-distance 'B 'D mygraph) -> 3"
(get-distance 'B 'D mygraph) 3) ; could work [(in case of (list 'B 'C 'D))]
(works? "(get-distance 'B 'D mygraph) -> 12"
(get-distance 'B 'D mygraph) 12); could work [(in case of (list 'B 'C 'E 'F 'G 'D))]
(works? "(get-distance 'H 'A mygraph) -> -1"
(get-distance 'H 'A mygraph) -1) ; should work
(works? "(get-distance 'H 'H mygraph) -> 0"
(get-distance 'H 'H mygraph) 0) ; should work
;; 4 (reachable?)
(works? "(reachable? 'A 'G mygraph) -> true"
(reachable? 'A 'G mygraph) true) ; should work
(works? "(reachable? 'A 'H mygraph) -> false"
(reachable? 'A 'H mygraph) false) ; should work
Jemand ne Idee, wie man noch hinzufügen könnte was wirklich herausgekommen ist? 
Denn Scheme kennt scheinbar nur "number->string" und "list->string"
wobei das nur für eine (listof symbol) funktioniert.
Für boolean oder sontiges geht da nix.
Ach und was man in der vollwertigen Sprachversion von Scheme statt
"define-struct" benutzt würde mich auch mal interessieren

Denn Scheme kennt scheinbar nur "number->string" und "list->string"
wobei das nur für eine (listof symbol) funktioniert.
Für boolean oder sontiges geht da nix.
Ach und was man in der vollwertigen Sprachversion von Scheme statt
"define-struct" benutzt würde mich auch mal interessieren
