Dies ist GNU CLISP, eine Implementierung von COMMON LISP.


Was ist LISP?
-------------

LISP ist eine Programmiersprache, die 1959 von J. McCarthy erfunden wurde.
Früher gab's viele verschiedene Dialekte, heute ist LISP durch den Industrie-
Standard COMMON LISP standardisiert und weit verbreitet worden. Anwendungen
reichen von der symbolischen Wissensverarbeitung (KI) über die Numerik
(MACLISP lieferte einen ebensoguten Numerik-Code wie FORTRAN) bis hin zu
verbreiteten Programmen wie Editoren (EMACS) oder CAD-Systemen (AUTOCAD).
Eine Einführung in die Sprache ist:

  Sheila Hughes: Lisp. Pitman Publishing Limited, London 1986.
  107 Seiten. ca. DM 15,80.

Nach einiger Zeit unentbehrlich ist das Standardwerk mit der Sprachdefinition

  Guy L. Steele Jr.: Common Lisp - The Language. Digital Press.
  1. Auflage 1984, 465 Seiten, ca. DM 73,60.
  2. Auflage 1990, 1032 Seiten. ca. DM 94,90.

Dieses Buch ist in HTML-Format per FTP erhältlich von
  ftp.cs.cmu.edu:/user/ai/lang/lisp/doc/cltl/cltl_ht.tgz
und per WWW einsehbar unter
  http://www.cs.cmu.edu:8001/Web/Groups/AI/html/cltl/cltl2.html oder
  http://www.cs.cmu.edu:8001/afs/cs/project/ai-repository/ai/html/cltl/cltl2.html .

Für Experten: Dieses Standardwerk hat sich zu einem ANSI-Standard
weiterentwickelt, der ausnahmsweise kostenlos erhältlich ist von
  http://www.lisp.org/HyperSpec/FrontMatter/

LISP liegt in einer interaktiven Umgebung vor, d.h. man gibt Formen ein, die
dann sofort ausgewertet werden. So kann man Variablen inspizieren, Funktionen
mit wechselnden Argumenten aufrufen oder auch eigene Funktionen definieren.


Inhalt:
-------

Zu CLISP gehören folgende Dateien:

#ifdef UNIX
#ifndef UNIX_BINARY_DISTRIB
   base/lisp.a          Hauptprogramm, muß erst noch gelinkt werden
#endif
#ifdef UNIX_BINARY_DISTRIB
   base/lisp.run        Hauptprogramm
#endif
   base/lispinit.mem    beim Start benötigtes Speicherabbild
   doc/clisp.1          Benutzungshinweise im man-Format von Unix
   doc/clisp.man        Benutzungshinweise
   doc/clisp.html       Benutzungshinweise im HTML-Format
   doc/impnotes.html    Dokumentation von Implementierungsdetails
#ifdef GNU_READLINE
   doc/clreadline.3     Eingabezeilen-Benutzungshinweise im man-Format von Unix
   doc/clreadline.man   Eingabezeilen-Benutzungshinweise
#endif
   doc/LISP-tutorial.txt  Kurzkurs LISP für Anfänger
   doc/CLOS-guide.txt     Kurzkurs CLOS
   README               dies hier
   SUMMARY              Kurzbeschreibung von CLISP
   ANNOUNCE             Ankündingung
   NEWS                 Liste der Veränderungen seit der letzten Version
   COPYRIGHT            Klarstellung des Urheberrechts
   GNU-GPL              Gebrauchslizenz für Offene Software
#ifdef GNU_READLINE
   doc/readline.dvi     Dokumentation zur GNU Readline-Bibliothek
#endif
   doc/editors.txt      Überblick über Editoren mit Lisp-Unterstützung
   emacs/*.el           Anpassung von Emacs, siehe doc/editors.txt
#ifndef UNIX_BINARY_DISTRIB
   src/clisp.c          Quellen des Wegweisers
#endif
   src/config.lisp      örtliche Konfiguration

und - als Zugabe, für den Fall, daß Sie Quellen lesen möchten -

   src/*.lisp           die Quellen zu lispinit.mem
   src/*.fas            dieselben Dateien in compilierter Form
#if !defined(UNIX_BINARY_DISTRIB) && defined(GNU_READLINE)

Um das ausführbare Programm zu erstellen, brauchen Sie ferner:

   base/libreadline.a    die GNU Readline-Bibliothek

oder

   base/libnoreadline.a  wertloser Ersatz für die GNU Readline-Bibliothek
#endif
#else /* !defined(UNIX) */
#ifdef AMIGAOS
      lisp.run         Hauptprogramm
#endif
#ifdef OS2
      lisp.exe         Hauptprogramm
#endif
#ifdef RISCOS
      lisp             Hauptprogramm
#endif
      lispinit.mem     beim Start benötigtes Speicherabbild
#ifdef GNU_GETTEXT
      locale/*/LC_MESSAGES/clisp.mo  Datenbanken lokalisierter Meldungen
#endif
      clisp.1          Benutzungshinweise im man-Format von Unix
#ifdef AMIGAOS
      clisp.doc        Benutzungshinweise
#else
      clisp.man        Benutzungshinweise
#endif
      clisp.html       Benutzungshinweise im HTML-Format
#ifdef OS2
      clisp.dvi        Benutzungshinweise im DVI-Format
#endif
      impnotes.html    Dokumentation von Implementierungsdetails
#ifdef GNU_READLINE
      clreadline.3     Eingabezeilen-Benutzungshinweise im man-Format von Unix
      clreadline.man   Eingabezeilen-Benutzungshinweise
      clreadline.html  Eingabezeilen-Benutzungshinweise im HTML-Format
#ifdef OS2
      clreadline.dvi   Eingabezeilen-Benutzungshinweise im DVI-Format
#endif
#endif
      LISP-tutorial.txt  Kurzkurs LISP für Anfänger
      CLOS-guide.txt     Kurzkurs CLOS
      editors.txt        ein paar Worte über Texteditoren für Lisp
#ifdef EMUNIX
      emx.exe          DOS-Extender zum Betrieb unter DOS oder OS/2
      emx-user.doc     Benutzungshinweise für EMX-Anwendungen
      emx-faq.doc      Frage-/Antwort-Katalog für EMX-Anwendungen
      emx.dll          EMX als dynamische OS/2-Bibliothek
      emxlibc.dll      die EMX-libc als dynamische OS/2-Bibliothek
      termcap.dat      Datenbank von Terminal-Beschreibungen
#endif
#ifdef RISCOS
      !Run             Startdatei für CLISP
      !Sprites         Pictogramm für CLISP
#endif
      README           dies hier
      SUMMARY          Kurzbeschreibung von CLISP
      ANNOUNCE         Ankündingung
      NEWS             Liste der Veränderungen seit der letzten Version
      COPYRIGHT        Klarstellung des Urheberrechts
      GNU-GPL          Gebrauchslizenz für Offene Software
#ifdef GNU_READLINE
      readline.dvi     Dokumentation zur GNU Readline-Bibliothek
#endif
      config.lisp      örtliche Konfiguration
#if !(defined(UNIX) || defined(WIN32))
      timezone.lisp    örtliche Zeitzone
#endif

und - als Zugabe, für den Fall, daß Sie Quellen lesen möchten -

      *.lisp           die Quellen zu lispinit.mem
#if !defined(OS2)
      *.fas            dieselben Dateien in compilierter Form
#endif
#endif

#ifdef OS2

Hardware-Voraussetzungen:
-------------------------

Diese OS/2-Version von CLISP setzt als CPU einen 80386 (SX oder DX) oder einen
80486 voraus, die OS/2 2.0 fährt.
Sie läuft auch auf einem Pentium; die Ergebnisse, die CLISP produziert, sind
vom Divisionsfehler des Intel Pentium nicht betroffen.

#endif
#ifdef AMIGAOS

Hardware-Voraussetzungen:
-------------------------

Diese Amiga-Version von CLISP setzt einen Amiga mit mindestens 1.5 MB RAM
voraus. Die CLISP-LOW genannte Version läuft auf Geräten, deren gesamter
Speicher mit 24 Bit adressierbar ist: auf 68000, A2620, A2630. Die
CLISP-HIGH genannte Version hingegen läuft in Speicher, der mit 27 Bit
adressierbar ist (Adressen #x00000000 bis #x07FFFFFF), jedoch nur auf
Geräten mit 68020/030/040(/60?): A3000 und A4000 ohne Zorro-III
Speichererweiterungskarten. Die CLISP-00 genannte Version läuft nur auf
68000, ist dafür schneller als CLISP-LOW. Die CLISP-WIDE genannte Version
arbeitet mit 64 Bit Integern, läuft daher in beliebigem Speicher, aber nur
mit 68020 oder besser (z.B. A4000 mit VMM) und ist wegen der 64 Bit
langsamer als CLISP-HIGH.

#endif
#ifdef RISCOS

Hardware-Voraussetzungen:
-------------------------

Diese Version von CLISP setzt einen Acorn Archimedes oder Acorn Risc PC mit
mindestens 4 MB RAM und RISC OS 3.0 voraus. Wie man eine CLISP-Version
produziert, die in nur 2 MB läuft, siehe unten.

#endif
#if defined(SINGLEMAP_MEMORY) && (defined(UNIX_LINUX) || !defined(HAVE_MMAP_ANON))

Software-Voraussetzungen:
-------------------------

#ifdef UNIX_LINUX
#ifdef GENERATIONAL_GC
#ifdef IMMUTABLE
Diese CLISP-Version setzt Linux 1.2.2 oder neuer voraus.
#else
Diese CLISP-Version setzt Linux 1.1.52 oder neuer voraus.
#endif
#else
Diese CLISP-Version setzt Linux 0.99.7 oder neuer voraus.
#endif
#endif
#if !defined(HAVE_MACH_VM) && !defined(HAVE_MMAP_ANON) /* impliziert HAVE_MMAP_DEVZERO */
/dev/zero muß von jedermann lesbar sein. Um das sicherzustellen, können Sie
ein "chmod a+r /dev/zero" ausführen.
#endif

#endif
#ifdef AMIGAOS

Software-Voraussetzungen:
-------------------------

Diese CLISP-Version setzt OS 2.04 (V37) oder neuer voraus.

#endif

Installation:
-------------

#ifdef OS2
Zuerst installieren Sie emx.dll and emxlibc.dll in einem separaten Verzeichnis,
sagen wir c:\emx\dll. Fügen Sie c:\emx\dll (mit dem korrekten Laufwerks-
buchstaben) zur LIBPATH-Anweisung in Ihrer Datei config.sys hinzu. Booten
Sie Ihren Computer neu, damit die LIBPATH-Anweisung und die neuen Umgebungs-
Variablen Wirkung zeigen.

#endif
#ifdef EMUNIX
Damit überlange Eingabezeilen angenehm dargestellt werden, müssen Sie eine
Zeile wie

    DEVICE=ANSI.SYS

in Ihrer Datei CONFIG.SYS haben. Außerdem muß die Umgebungs-Variable TERM
gesetzt sein, und die Umgebungs-Variable TERMCAP muß den Pfadnamen der
Datenbank von Terminal-Beschreibungen enthalten, wobei \ durch / zu ersetzen
ist. Es ist wohl nicht schlecht, diese Sachen in das unten erstellte clisp.bat
zu schreiben. Vielleicht wollen Sie termcap.dat in einem separaten Verzeichnis,
sagen wir c:\emx\etc, installieren.

#endif
#if defined(UNIX) || defined(WIN32)
#if defined(UNIX) && !defined(UNIX_BINARY_DISTRIB)
Um das ausführbare Programm zu erstellen, geben Sie ein:

         make

#if 0 /* def GNU_READLINE - man muß Makefile verändern */
Wenn Sie auf die Editiermöglichkeiten der GNU Readline-Bibliothek verzichten
möchten, ersetzen Sie vorher in der LIBS-Zeile der Datei base/makevars
"libreadline.a" durch "libnoreadline.a".

#endif
#endif
Passen Sie die Strings innerhalb von src/config.lisp mit einem Texteditor an.
#else
Passen Sie den Inhalt von config.lisp, insbesondere die Definitionen von
short-site-name und long-site-name, an Ihre örtlichen Gegebenheiten an.
Vielleicht möchten Sie auch die Zeitzonendefinition am Ende von timezone.lisp
ändern.
#endif
Starten Sie dann

#if defined(OS2) || defined(WIN32_NATIVE)
         lisp.exe -M lispinit.mem
#endif
#ifdef AMIGAOS
         lisp.run -M lispinit.mem
#endif
#ifdef UNIX
         base/lisp.run -M base/lispinit.mem
#endif
#ifdef RISCOS
         lisp -M mem.lispinit

oder geben Sie einen Doppelklick auf das !Clisp Verzeichnis.
#endif

Auf den LISP-Prompt

      > _

hin eingeben:

#ifdef RISCOS
        (cd "<clisp$path>")

(um sicherzustellen, daß das !Clisp Verzeichnis zum aktuellen Verzeichnis
wird), dann

#endif
#if defined(UNIX) || defined(WIN32)
        (compile-file "src/config.lisp")
        (load "src/config.fas")
#else
        (compile-file "config.lisp")
        (load "config.fas")

und - falls Sie timezone.lisp verändert haben -

        (compile-file "timezone.lisp")
        (load "timezone.fas")
#endif

und dann

#ifdef UNIX
        (cd "base/")
#endif
        (saveinitmem)

Damit überschreiben Sie die Datei lispinit.mem mit Ihrer Konfiguration. Sodann

        (exit)

#ifdef UNIX
Alles weitere erledigt ein

        make install

Sie können dies stattdessen auch selber, schrittweise tun:

#endif
#ifndef RISCOS
Legen Sie ein Verzeichnis an und legen Sie das ausführbare Programm und das
Speicherabbild dort ab.
#endif
#ifdef UNIX
Ich schlage hierfür /usr/local/lib/lisp vor:

   mkdir /usr/local/lib/lisp
   mv base/lisp.run /usr/local/lib/lisp
   mv base/lispinit.mem /usr/local/lib/lisp
#endif
#if defined(OS2) || defined(WIN32_NATIVE)
Angenommen, Sie wählen dafür D:\LIB\LISP :

   mkdir d:\lib\lisp
   copy lisp.exe d:\lib\lisp
   copy lispinit.mem d:\lib\lisp
#endif

#if defined(MSDOS) || defined(WIN32_NATIVE)
Und erstellen Sie eine Kommando-Datei, die Lisp startet:

#ifndef OS2
   copy con c:\bat\clisp.bat
#else
   copy con c:\cmd\clisp.cmd
#endif
#ifdef EMUNIX
   set TERM=ansi
   set TERMCAP=c:/emx/etc/termcap.dat
#endif
   d:\lib\lisp\lisp.exe -M d:\lib\lisp\lispinit.mem -B d:\lib\lisp\ %1 %2 %3 %4 %5 %6 %7 %8 %9
   [Ctrl-Z]
#endif
#ifdef UNIX
Und erstellen Sie den Wegweiser, der Lisp startet:

#ifdef UNIX_BINARY_DISTRIB
   cc -O -DLISPLIBDIR='"/usr/local/lib/lisp"' \
         -DLOCALEDIR='"/usr/local/share/locale"' \
      src/clisp.c -o /usr/local/bin/clisp
#else
   ./hardcode -DLISPLIBDIR='/usr/local/lib/lisp' \
              -DLOCALEDIR='/usr/local/share/locale' \
              clisp /usr/local/bin/clisp
#endif

Installieren Sie nun die Benutzungshinweise

   mv doc/clisp.1 /usr/local/man/man1/clisp.1
#ifdef GNU_READLINE
   mv doc/clreadline.3 /usr/local/man/man3/clreadline.3
#endif

and probieren Sie

   man clisp
#endif

#ifdef AMIGAOS

Anmerkung:
----------

Sie können CLISP von der Workbench(r) aus starten. Die folgenden Anwendungs-
parameter des Anwendungs-Piktogrammes werden erkannt:

   WINDOW=<Spezifikation eines Fensters oder eines Kanals>
   ARGS=<Argumente wie beim Kommandozeilen-Aufruf>

Beispielsweise

   WINDOW=CON:0/11/640/200/CLISP-Fenster/CLOSE
   ARGS=-M lispinit.mem

#endif
#ifdef RISCOS

Wenig Speicher?
---------------

Wenn Sie nur 2 MB RAM haben, können Sie leicht ein abgemagertes CLISP
produzieren, das weniger Speicher verlangt, aber ohne Teile von CLtL2,
dpANS-LOOP, CLOS, Conditions und generische Streams daherkommt: Ersetzen
Sie defs2.fas, loop.fas, clos.fas, conditio.fas, defs3.fas, gstream.fas
durch leere Dateien und starten Sie

   lisp
   > (load "init.fas")
   > (saveinitmem)
   > (exit)

Dadurch wird lispinit.mem durch ein kleineres überschrieben.

#endif

Wenn's Probleme gibt:
---------------------

#ifdef EMUNIX
Sollte clisp überhaupt nicht gestartet werden können, konsultieren Sie
EMX-USER.DOC. lisp.exe ist eine EMX-Anwendung. Was dort über EMX-Anwendungen
gesagt wird, trifft auch auf lisp.exe zu.

#endif
Bei Errors befindet man sich im Debugger:

     1. Break> _

Hier kann man wie üblich Formen auswerten.
Außerdem:

     Help
               ruft Hilfestellung an.
     Abort     oder
     Unwind
               steigt hoch in die nächsthöhere Hauptschleife.
     Backtrace
               zeigt den Stackinhalt an. Das hilft bei der Fehlersuche.

Außerdem kann man sich die Werte der Variablen der Funktion anzeigen lassen,
in der der Fehler passierte.

Bei größeren Problemen, z.B. harten Abstürzen, bitte Fehlerbeschreibung
und reproduzierbare Vorgehensweise zur Erzeugung dieses Fehlers an die
Autoren senden. Bitte nennen Sie dabei auch die Version von CLISP; sie
erhalten sie durch Aufrufen von (lisp-implementation-version).


Quellen:
--------

Die Quellen von CLISP gibt es von
     ftp://clisp.cons.org/pub/lisp/clisp/source/clispsrc*
#ifdef UNIX_LINUX
Die Quellen der jüngsten Distribution von CLISP für Linux findet man in
     ftp://sunsite.unc.edu/pub/Linux/devel/lang/lisp/clisp-source.tar.gz
#endif


Mailing-Liste:
--------------

Für die Benutzer von CLISP gibt es drei Mailing-Listen. Sie finden
Abonnier-Informationen und Archive auf der Homepage http://clisp.cons.org/.


Dank:
-----

Wir schulden Dank
  * Guy L. Steele und vielen anderen für die Spezifikation von Common Lisp.
#ifdef UNIX
  * dem GNU-Projekt von Richard Stallman für GCC, Autoconf und die
    Readline-Bibliothek.
#else
#ifdef GNU_READLINE
  * dem GNU-Projekt von Richard Stallman für GCC und die Readline-Bibliothek.
#else
#ifdef GNU
  * dem GNU-Projekt von Richard Stallman für GCC.
#endif
#endif
#endif
#ifdef EMUNIX
  * Eberhard Mattes für EMX.
#endif


Autoren:
--------

        Bruno Haible
        Michael Stoll

Email: clisp-list@lists.sourceforge.net
#ifdef AMIGAOS

Portierung für den Amiga:
-------------------------

        Jörg Höhle

Email: Joerg.Hoehle@gmd.de
#endif
#ifdef RISCOS

Portierung für den Acorn RISC OS PC:
------------------------------------

        Peter Burwood

Email: clisp@arcangel.dircon.co.uk
#endif

Wartung und Pflege:
-------------------

        Sam Steingold

Email: clisp-list@lists.sourceforge.net
