zurück zum Artikel

RTFM #4: Common Lisp

Golo Roden

Die Serie RTFM stellt in unregelmĂ€ĂŸigen AbstĂ€nden zeitlose und empfehlenswerte BĂŒcher fĂŒr Entwicklerinnen und Entwickler vor. PrimĂ€r geht es um FachbĂŒcher, doch gelegentlich sind auch Romane darunter. Heute geht es um "Common Lisp: A Gentle Introduction to Symbolic Computation" von David S. Touretzky.

Die Serie RTFM stellt in unregelmĂ€ĂŸigen AbstĂ€nden zeitlose und empfehlenswerte BĂŒcher fĂŒr Entwicklerinnen und Entwickler vor. PrimĂ€r geht es um FachbĂŒcher, doch gelegentlich sind auch Romane darunter. Heute geht es um "Common Lisp: A Gentle Introduction to Symbolic Computation" von David S. Touretzky.

Praktisch alle modernen Programmiersprachen basieren auf Konzepten, die erstmals in Lisp eingefĂŒhrt wurden. Dazu gehören unter anderem die if-Anweisung, der rekursive Aufruf von Funktionen und der Symbol-Datentyp. Allerdings gibt es auch Konstrukte, die bislang nur Lisp beherrscht. Es liegt daher nahe, dass die BeschĂ€ftigung mit Lisp dazu fĂŒhrt, ein besseres VerstĂ€ndnis von Programmierung zu entwickeln – und zwar gĂ€nzlich unabhĂ€ngig von der eigenen Erfahrung.

Dazu passt auch ein Zitat des US-amerikanischen Informatikers Eric S. Raymond, der einmal gesagt hat, Lisp sei selbst dann eine lernenswerte Sprache, wenn man sie niemals verwenden werde. Der Erkenntnisgewinn allein fĂŒhre bereits dazu, ein allgemein besserer Entwickler zu werden. Was liegt also nĂ€her, als bei Gelegenheit ein Buch zu Lisp zu lesen?

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Google Ireland Limited) ĂŒbermittelt werden. Mehr dazu in unserer DatenschutzerklĂ€rung [1].

Dazu empfiehlt sich "Common Lisp: A Gentle Introduction to Symbolic Computation" von David S. Touretzky. Das Buch stammt aus dem Jahr 1990, ist im Vergleich zu Lisp als Sprache also noch relativ jung, und umfasst rund 450 Seiten.

Das erste Kapitel fĂŒhrt zunĂ€chst einige Grundbegriffe ein, darunter Funktionen, Symbole und Komposition. Das erfolgt dabei ohne Code, allein auf der Basis von Diagrammen und Zeichnungen, wodurch das Buch auch ohne Vorkenntnisse in der Programmierung verstĂ€ndlich und zugĂ€nglich wird. Im Prinzip gibt das erste Kapitel einen Eindruck von der Frage, was Programmierung ĂŒberhaupt ist.

Das zweite Kapitel fĂŒhrt dann Listen als grundlegende Datenstruktur ein, was bei einer Sprache, der Name ein Akronym fĂŒr "List Processing" ist, wenig verwunderlich ist. Damit wird zugleich aber auch die Grundlage fĂŒr die S-Expressions gelegt, die in Lisp verwendet werden, um sowohl Code als auch Daten zu darzustellen.

Das dritte Kapitel fĂŒhrt schließlich die EVAL-Funktion ein, mit der die Auswertung eben dieser S-Expressions erfolgt. An dieser Stelle wird nun auch Lisp als Sprache auf dem Computer genutzt, sodass sich nun tatsĂ€chlich ausfĂŒhrbare Programme schreiben lassen.

Im vierten Kapitel stoßen nun Bedingungen dazu, um komplexere Programme schreiben zu können. Bemerkenswert ist, dass bis hierhin weder Variablen noch Seiteneffekte eingefĂŒhrt wurden. Der Stil, den das Buch vermittelt, kann man bis hierhin durchaus als funktional bezeichnen.

Das Ă€ndert sich dann allerdings im fĂŒnften Kapitel, wo ebendiese Konzepte nun ergĂ€nzt werden, was aber direkt aufzeigt, um wie viel schwieriger die Auswertung und auch die Vorhersage von Code werden, da man ĂŒber zeitliche Aspekte nachdenken muss und nicht mehr lĂ€nger nur mit Funktionen im mathematischen Sinne zu tun hat.

Das sechste Kapitel schließlich fĂŒhrt weitergehende Datenstrukturen ein, die auf Listen basieren, darunter BĂ€ume. Es geht um verĂ€nderliche und unverĂ€nderliche Datenstrukturen, unterschiedliche Effizienz von Datenstrukturen, IdentitĂ€t, Gleichheit, und andere fortgeschrittene Themen. Dieses Kapitel schließt sozusagen die Vorstellung der Grundlagen ab.

Im Anschluss daran stellen das siebte und achte Kapitel zwei Programmierparadigmen vor, nĂ€mlich das applikative und das rekursive. Insbesondere diese beiden Kapitel können beitragen, ĂŒber den gewohnten Tellerrand hinaus zu blicken.

Den meisten Entwicklerinnen und Entwicklern dĂŒrfte zwar bewusst sein, dass beispielsweise iteratives und rekursives Vorgehen gleichermaßen mĂ€chtig sind – aber es ist doch etwas anderes, wenn noch einmal deutlich vor Augen gefĂŒhrt wird, dass man gĂ€nzlich ohne jegliche iterativen Konstrukte arbeiten kann, indem man ausschließlich auf Rekursion und Endrekursion setzt.

Die verbleibenden fĂŒnf Kapitel behandeln dann schließlich verschiedene Konzepte, die in ErgĂ€nzung zu den bis hier genannten Themen stehen. Dazu zĂ€hlen beispielsweise I/O-Zugriffe, Blockstrukturen, das Typsystem von Lisp und Makros.

Die Reihenfolge, die das Buch dabei insgesamt einschlĂ€gt, kann man durchaus als ungewöhnlich bezeichnen. Viele Themen, die in anderen BĂŒchern ĂŒber Programmierung verhĂ€ltnismĂ€ĂŸig frĂŒh behandelt werden (beispielsweise Schleifen oder Variablen), kommen in diesem Buch erst sehr spĂ€t zur Sprache. Das Buch findet dabei eine gute Balance zwischen einfacher VerstĂ€ndlichkeit und tiefergehenden Details.

Die Sprache Lisp wird bei all dem fast zur Nebensache. NatĂŒrlich lernt man auch Lisp, aber es lĂ€sst sich vor allem viel Konzeptionelles mitnehmen. Daher ist das Buch auch eine gute LektĂŒre fĂŒr alle Entwicklerinnen und Entwickler, die Lisp zwar nicht im praktischen Einsatz haben, aber sich fĂŒr Programmierung und Programmierkonzepte im Allgemeinen interessieren. ( [2])


URL dieses Artikels:
https://www.heise.de/-5058652

Links in diesem Artikel:
[1] https://www.heise.de/Datenschutzerklaerung-der-Heise-Medien-GmbH-Co-KG-4860.html
[2] mailto:webmaster@goloroden.de