NAME:
Magiertool: Knete
BESCHREIBUNG:
Die Knete ist ein in LPC geschriebener Lisp-Interpreter. Dieser hat
die besondere Eigenschaft, die Lisp-Quellen direkt in den vom
Amylaar GameDriver angebotenen closures zu uebersetzen. Dadurch ist
mit der Knete alles das moeglich, was auch mit LPC moeglich ist.
Es ist ein generisches, frei programmierbares Hilfsmittel.
Die Knete liegt unter: "/obj/tools/lisp/knete.c"
Die Knete befindet sich normal im Kommandomodus, wo sie vor
allen Ausdruecken das Kommando 'knete' erwartet. Wenn man viel
machen will kann man auch jedes Kommando als Lisp interpretieren
lassen. Hierfuer gibt es die Kommandos 'knete an' und 'knete aus'.
Beispiele:
knete call_other (find_player "fiona") "QueryProp" "title"
knete an
(call_other (find_player "fiona")
"QueryProp" "title")
knete aus
Wie man sieht koennen im 'stets'-Modus Lisp-Kommandos auch auf
mehrere Eingabezeilen verteilt werden, wenn man entsprechend
Klammern setzt.
FUNKTIONSBESCHREIBUNG:
Die Knete kann im Prinzip fast alles, was ein einfacher Lisp-
Interpreter kann. Ausnahmen sind Tupel (Bsp: (1 . 2)), welche nicht
implementiert sind. Die Grundlegenden Funktionen, wie define, setq,
cons, cdr, car etc werden beim Laden der Knete angezeigt. Je nach
Zeit, werden eventuelle auch weitere Standardfunktionen hinzu-
kommen, um die Knete moeglichst common-lisp kompatibel zu machen.
BENUTZUNG:
Zu allererst sollte man wissen, dass dies hier keine Einfuehrung in
Lisp ist oder sein soll! Die wichtigsten Merkmale der Knete werden
aufgefuehrt an einigen kleinen Beispielen. Wer Lisp kennenlernen
moechte kann dies mit den handelsueblichen Buechern tun.
Wer dennoch basteln moechte: Lisp ist eine Sprache in Prefixnotation,
d.h. der Funktionsname steht immer als erstes und dann kommen die
Argumente. Ein Ausdruck ist mit den ihn umgebenden Klammern komplett.
Beispiel: (+ 1 1) ;;; errechnet die Summe aus 1 und 1
Solche Klammerausdruecke koennen beliebig geschachtelt werden.
Beispiel: (+ 1 (+ (+ 1 1) 1))
Es stehen alle efuns, sowie einige lfuns zur Verfuegung! Zu den efuns
gehoeren auch +,-,*,/,%,!,[,[<,[<.. etc, also alle Operatoren von LPC.
Die Knete hat zwei Modi:
a) Laden von Lisp aus einer Datei
b) Verarbeiten von Eingaben aus der Kommandozeile
Zu a)
Mit der Funktion "load" koennen Dateien eingelesen und interpretiert
werden. Die Funktion hat nur ein Argument, und das ist der Dateiname.
Beispiel: (load "/players/hate/lisp.l")
Zu b)
Wenn die Knete gecloned wurde, koennen jederzeit Lispausdruecke
eingegeben werden, welche dann interpretiert werden. Dabei sollte
beachtet werden, dass die aeusserste Klammer nicht notwendig ist!
Beispiel: (+ 1 (+ 1 1)) koennte man auch schreiben als:
+ 1 (+ 1 1)
Dies ist vor allem dann interessant, wenn man die Moeglichkeiten
der Knete als alias-Werkzeug in betracht zieht. Somit ist es
moeglich, eine Funktion zu schreiben und diese dann wie ein alias
zu benutzen.
Beispiel: (defun who () (users)) ;;; gibt das users array aus
Jetzt muss nur noch who eingegeben werden und das
array wird ausgegeben.
Da Lisp wesentlich komplexere Ausdruecke ermoeglicht, als der
normale alias-Interpreter, liegen die Vorteile auf der Hand.
KONFIGURATION:
Die Knete laesst sich fuer jeden Nutzer konfigurieren, indem sie eine
Datei "/players/<name>/lisp.l" aus dessen Heimatverzeichnis laedt.
Ein Beispiel, was man damit machen kann befindet sich unter:
"/players/hate/lisp.l"
Dort bekommt man zum Beispiel die Funktionen q und s fuer Properties.
Das in der Einleitung erwaehnte Beispiel koennte dann mit
q fiona title
erledigt werden.
BUGS:
Es gibt momentan noch ein Problem, wenn auf der Kommandozeile
Klammern fehlen. Dann kommt eine Meldung: "*Missing 2 )"
In diesem Fall einfach zweimal hintereinander ) auf jeweils einer
einzelnen Zeile eingeben! Dieses Problem tritt vor allem dann auf,
wenn man zum Beispiel ein :( eingibt.
Dies tritt natuerlich nicht auf, wenn man die Knete im Kommando-
modus (also 'knete aus') benutzt.
|