Skip to content

Ein rekursives Vergnügen

Ein rekursives Vergnügen published on Keine Kommentare zu Ein rekursives Vergnügen

Wer kennt die Programmiersprache LISP noch? Den Listenprozessor? Nach FORTRAN ist LISP die zweitälteste Hochprogrammiersprache. Entwickelt wurde sie Ende der fünfziger Jahre am MIT von John McCarthy. Rekursion ist in LISP, ähnlich wie in Prolog, eine noch weitaus bedeutendere Technik als in anderen Sprachen. Die typischen Schleifenkonstrukte vom "for" oder "while"-Typus sind in LISP in aller Regel schlechter Stil, obwohl dergleichen inzwischen auch in die Sprache eingebaut wurde. 'Die Sprache' ist nämlich ohnehin ein problematischer Ausdruck, denn LISP wurde erst 1994 standardisiert (ANSI Common Lisp); bis dahin waren bereits unzählige Dialekte der Sprache entstanden. Babylonisches Lispeln.
Der wichtigste Datentyp in LISP ist die Liste. Und nicht nur komplexe Datenstrukturen, auch Funktionen sind Listen. Deswegen können LISP-Programme besonders gut andere LISP-Programme malträtieren, verändern und zur Not auch schonmal schreiben... Darum war - und ist - die Sprache für KI-Zwecke und dynamische Prozesse besonders beliebt und geeignet.

Ich habe heute angefangen, mich ein wenig mit dem guten Stück zu beschäftigen und habe erst einmal vier Funktionen geschrieben: JOINL nimmt zwei Listen als Argument und fügt sie zusammen (concatenation); REVERSEL nimmt eine Liste als Argument und kehrt die Reihenfolge der Elemente um; SORTEDL nimmt eine List (am besten von Zahlen) als Argument und überprüft, ob sie aufsteigend geordnet ist; SORTL nimmt eine Liste (am besten von Zahlen) als Argument und ordnet sie aufsteigend. Voilá:

(DEFUN JOINL

(La Lb)

(COND

1
(CONS (CAR La) Lb))
(T
(CONS (CAR La) (JOINL (CDR La) Lb)))

)
)

(DEFUN REVERSEL

(L)

(COND

2
L)
(T
(JOINL
(REVERSE (CDR L)) (CONS (CAR L) NIL)
)
)

)
)

(DEFUN SORTEDL

(L)

(COND
3
T)

(T
(IF (SORTEDL (CDR L))
(<= (CAR L) (CAR (CDR L)))
NIL
)
)
)

)

(DEFUN SORTL

(L)

(COND
4

(SORTL

(JOINL (LIST (CAR (CDR L)) (CAR L)) (CDR (CDR L)))

)
)

(T (SORTL (CONS (CAR L) (SORTL (CDR L)))))
)

)

(DEFUN SORTL2

(L)

(COND
5)

(SORTL2 (CONS (CAR (CDR L)) (CONS (CAR L) (CDR (CDR L))))))

(T (SORTL2 (CONS (CAR L) (SORTL2 (CDR L)))))
)
)


  1. NULL La)
    Lb)
    ((NULL (CDR La 

  2. NULL (CDR L 

  3. NULL (CDR L 

  4. SORTEDL L)
    L)

    ((SORTEDL (CDR L 

  5. SORTEDL L)
    L)

    ((> (CAR L) (CAR (CDR L 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.