MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | NAME: |
| 2 | *** KNETE *** |
| 3 | |
| 4 | BESCHREIBUNG: |
| 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 | |
| 13 | FUNKTIONSBESCHREIBUNG: |
| 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 | |
| 21 | BENUTZUNG: |
| 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 | |
| 67 | KONFIGURATION: |
| 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 | |
| 75 | BUGS: |
| 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 | |