Scheme in Eclipse

Benutzeravatar
Twister11
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 26. Nov 2005 14:18
Kontaktdaten:

Scheme in Eclipse

Beitrag von Twister11 »

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.

Benutzeravatar
Twister11
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 26. Nov 2005 14:18
Kontaktdaten:

Beitrag von Twister11 »

Es muss doch wen geben, der das hinbekommt :) *waaaaah* :)

Tutor16
Windoof-User
Windoof-User
Beiträge: 30
Registriert: 25. Okt 2006 16:52

Beitrag von Tutor16 »

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 :wink: ) 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.

rick
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 105
Registriert: 17. Jan 2006 23:20

Beitrag von rick »

Bei mir läuft es halbwegs (mit Eclipse 3.2.1):
Ich hab das jar-file in den plugins-Ordner von Eclipse kopiert. Der Editor und der interne Interpreter funktionieren aber ich kann kein im Editor geschriebenes Programm über Scheme/start interpreter ausführen....

ich bleib lieber bei DrScheme :)

Benutzeravatar
Twister11
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 26. Nov 2005 14:18
Kontaktdaten:

Beitrag von Twister11 »

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? :)

Tutor16
Windoof-User
Windoof-User
Beiträge: 30
Registriert: 25. Okt 2006 16:52

Beitrag von Tutor16 »

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?

Benutzeravatar
Twister11
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 26. Nov 2005 14:18
Kontaktdaten:

Beitrag von Twister11 »

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 :P

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) :D

Benutzeravatar
Twister11
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 26. Nov 2005 14:18
Kontaktdaten:

Beitrag von Twister11 »

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*

Benutzeravatar
Twister11
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 26. Nov 2005 14:18
Kontaktdaten:

Beitrag von Twister11 »

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:

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>
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:

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)
Meine Vermutung: Wird wahrscheinlich der gleiche Fehler sein wie
beim SISC-Interpreter, nur eben ist die Fehlermeldung im ersten
Momentn icht besonderes "sprechend" :D *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)

rick
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 105
Registriert: 17. Jan 2006 23:20

Beitrag von rick »

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 :?:

Benutzeravatar
Twister11
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 26. Nov 2005 14:18
Kontaktdaten:

Beitrag von Twister11 »

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


Benutzeravatar
Twister11
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 26. Nov 2005 14:18
Kontaktdaten:

Beitrag von Twister11 »

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 :P

Antworten

Zurück zu „Archiv“