command line XPath
Ich habe bei
PLT Scheme
mit
PLaneT
experimentiert und auch mit
SXML
.
Bisher hatte ich irgend ein
Perl
-Skript, um auf der Kommandozeile XPath-Ausdrücke an eine XML-Datei zu schicken. Dieses war aber langsam und lieferte nicht immer das gewünschte Ergebnis.
Deshalb habe ich ein
Scheme
-Skript (
xpath.scm
) geschrieben, das nun diese Aufgabe erfüllt:
mzscheme -r xpath.scm Datei XPath
Das Skript öffnet die XML-Datei, erzeugt daraus intern sxml, führt den XPath aus und erzeugt aus dem Ergebnis XML, das dann an den current-output-port (z.B. stdout) geschickt wird.
... das Skript unterstützt (noch) keine Namespaces
.
Ändere nie ein Variable
Bei
del.icio.us/tag/scheme
habe ich einen Link zum Artikel
Mastering recursive programming
gefunden, in dem Jonathan Bartlett
beschreibt, wie sich Rekursion in einer imperativen Programmiersprache nutzen lässt.
Während er am Anfang ein Paar
Scheme
und C
Rekursionsbeispiele aufzeigt und zum Schluss die Speicheroptimierung durch tail-call
aufzeigt, geht er im Mittelteil darauf ein, wie man überprüfbare und richtige Programme - mit Hilfe der Rekursion - schreibt.
Bugs gehören zum täglichen Leben eines Programmierers und sie treten sogar in kleinen Schleifen oder Funktionen auf. Der Hauptgrund liegt in der Statusänderung von Variablen. Abhängig vom Status entstehen unterschiedliche Ergebnisse, so dass sich die ganze Komplexität gar nicht überblicken lässt.
Es gibt eine Lösung, mit einer einzigen Regel: Weise einer Variable einen Wert zu und ÄNDERE SIE NIE!
Imperative, prozedurale und die OO
Programmierung bauen aber gerade auf die Zuweisung und Änderung von Variablen auf. Jedoch ist gerade die Statusänderung eines der Gründe für Programmierfehler.
In drei Situationen werden Variablen verändert:
Im Artikel wird eine Beispielfunktion in eine rekursive Funktion umgewandelt und es wird auch aufgezeigt, wie sich diese rekursive Funktion auf Korrektheit überprüfen lässt.
Zum Schluss geht Jonathan Bartlett
noch auf tail-recursive Funktionen ein, die den Speicherbedarf des Stacks, unabhängig von der tiefe der Aufrufe, konstant halten. Hierzu hat er ein Assembler Beispiel, jedoch erwähnt er auch, dass
GCC
in bestimmten Konstellationen eine tail-call
Optimierung anwendet.
... je komplexer die Programme werden, um so eher bietet die rekursive Programmierung dem Programmierer eine Möglichkeit den Code so zu organisieren, dass er wartbar und logisch konsistent ist.
Scheme serverseitig
Kürzlich hat der
Bluish Coder
über
Icing: A Scheme continuation based web framework
geschrieben.
Icing
ist ein 'web development system' basierend auf
Scheme
und bestehend aus
SISCWeb
,
SSAX
und
SXPath
.
Icing
ist aber bisher noch nicht erschienen.
SISCWeb
baut auf
SISC
auf, und dies wiederum - wie hier schon berichtet - ist eine
Scheme
Implemntierung basierend auf
Java
. Somit lässt sich das
SISCWeb
Framework in eine
J2EE
Umgebung einbinden.
Bereits in einem älteren
Bluish Coder
Artikel (
Server side Javascript
) wurde
SISCWeb
erwähnt. Damals habe ich mir die Beispiele angeschaut:
),Über http://localhost:8080/siscweb-examples-0.33/ lassen sich die Beispiele betrachten. Zwei von ihnen finde ich interessant:
, der den Browser-Back-Button
und das 'Clonen' von Fenstern unterstützt, und dabei den Inhalt des Stacks entsprechend berücksichtigt.
: Für die Implementierung des Spiels, wurde
Schelog
verwendet, eine Prolog
Implementierung in
Scheme
.... Prolog
über
Scheme
, über
Java
, in einem
J2EE
Applicationserver - Logik, Funktional und OO
zusammengewürfelt.
wortblog.de CCed
Die Sätze, die bei
Wortblog
entstehen, stehen nun unter der
Creative Commons Lizenz
. Ich habe hierfür die
CC by-nc-sa Lizenz
gewählt:
)
stehen.