blob: e4d1f3eb3c2be2be0186b57b27a426a6c71eb3df [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001NAME:
2 *** KNETE ***
3
4BESCHREIBUNG:
5 Die Knete ist ein in LPC geschriebener Lisp-Interpreter. Dieser hat
6 die besondere Eigenschaft, die Lisp-Quellen direkt in den vom
7 Amylaar GameDriver angebotenen closures zu uebersetzen. Dadurch ist
8 mit der Knete alles das moeglich, was auch mit LPC moeglich ist.
9 Es ist ein generisches, frei programmierbares Hilfsmittel.
10
11 Die Knete befindet sich unter: "/obj/tools/lisp"
12
13FUNKTIONSBESCHREIBUNG:
14 Die Knete kann im Prinzip fast alles, was ein einfacher Lisp-
15 Interpreter kann. Ausnahmen sind Tupel (Bsp: (1 . 2)), welche nicht
16 implementiert sind. Die Grundlegenden Funktionen, wie define, setq,
17 cons, cdr, car etc werden beim Laden der Knete angezeigt. Je nach
18 Zeit, werden eventuelle auch weitere Standardfunktionen hinzu-
19 kommen, um die Knete moeglichst common-lisp kompatibel zu machen.
20
21BENUTZUNG:
22 Zu allererst sollte man wissen, dass dies hier keine Einfuehrung in
23 Lisp ist oder sein soll! Die wichtigsten Merkmal der Knete werden
24 aufgefuehrt an einigen kleinen Beispielen. Wer Lisp kennenlernen
25 moechte kann dies mit den handelsueblichen Buechern tun.
26
27 Wer dennoch basteln moechte: Lisp ist eine Sprache in Prefixnotation,
28 d.h. der Funktionsname steht immer als erstes und dann kommen die
29 Argumente. Ein Ausdruck ist mit den ihn umgebenden Klammern komplett.
30 Beispiel: (+ 1 1) ;;; errechnet die Summe aus 1 und 1
31 Solche Klammerausdruecke koennen beliebig geschachtelt werden.
32 Beispiel: (+ 1 (+ (+ 1 1) 1))
33
34 Es stehen alle efuns, sowie einige lfuns zur Verfuegung! Zu den efuns
35 gehoeren auch +,-,*,/,%,!,[,[<,[<.. etc, also alle Operatoren von LPC.
36
37 Die Knete hat zwei Modi:
38 a) Laden von Lisp aus einer Datei
39 b) Verarbeiten von Eingaben aus der Kommandozeile
40
41 Zu a)
42 Mit der Funktion "load" koennen Dateien eingelesen und interpretiert
43 werden. Die Funktion hat nur ein Argument, und das ist der Dateiname.
44
45 Beispiel: (load "/players/hate/lisp.l")
46
47 Zu b)
48 Wenn die Knete gecloned wurde, koennen jederzeit Lispausdruecke
49 eingegeben werden, welche dann interpretiert werden. Dabei sollte
50 beachtet werden, dass die aeusserste Klammer nicht notwendig ist!
51
52 Beispiel: (+ 1 (+ 1 1)) koennte man auch schreiben als:
53 + 1 (+ 1 1)
54
55 Dies ist vor allem dann interessant, wenn man die Moeglichkeiten
56 der Knete als alias-Werkzeug in betracht zieht. Somit ist es
57 moeglich, eine Funktion zu schreiben und diese dann wie ein alias
58 zu benutzen.
59
60 Beispiel: (defun who () (users)) ;;; gibt das users array aus
61 Jetzt muss nur noch who eingegeben werden und das
62 array wird ausgegeben.
63
64 Da Lisp wesentlich komplexere Ausdruecke ermoeglicht, als der
65 normale alias-Interpreter, liegen die Vorteile auf der Hand.
66
67KONFIGURATION:
68 Die Knete laesst sich fuer jeden Nutzer konfigurieren, indem sie eine
69 Datei "/players/<name>/lisp.l" aus dessen Heimatverzeichnis laedt.
70
71 Ein Beispiel, was man damit machen kann befindet sich unter:
72 "/players/hate/lisp.l"
73 Die MUD Spezifischen Teile und Abfragen koennen ignoeriert werden.
74
75BUGS:
76 Es gibt momentan noch ein Problem, wenn auf der Kommandozeile
77 Klammern fehlen. Dann kommt eine Meldung: "*Missing 2 )"
78 In diesem Fall einfach zweimal hintereinander ) auf jeweils einer
79 einzelnen Zeile eingeben! Dieses Problem tritt vor allem dann auf,
80 wenn man zum Beispiel ein :( eingibt.
81