Common LISP - Eine Allgemeine Ubersicht¨

Common LISP - Eine Allgemeine Ubersicht¨

Common LISP - Eine allgemeine Ubersicht¨ Martin Elshuber∗ 24. November 2004, Wien Abstract ausreichend sein um Funktionen berechenbar zu machen, λ-Ausdrucke¨ zur Funktionsbenen- Common LISP ist eine sehr vielseitige nung, Repr¨asentation von LISP-Programmen Programmiersprache. Dieser Artikel soll als LISP-Daten, die LISP-Funktion EVAL dient einen kurzen Uberblick¨ uber¨ Common sowohl als formale Definition als auch als LISP liefern. Zuerst gebe ich einen Uber-¨ Interpreter[3]. blick uber¨ die Geschichte von Common Aus LISP haben sich nun viele andere Dia- Lisp. Als n¨achsten Punkt beschreibe ich lekte entwickelt, von den die gr¨oßten sicherlich die Syntax von Common LISP sowie die MacLISP und InterLISP waren. Weiters exis- wichtigsten Befehle. Abschließend wer- tierten noch Franz LISP und Spice Lisp. den die Besonderheiten von Common Im April 1981 lud ARPA alle Enwicklungs- LISP beschrieben, sowie einige Anwen- gruppen von LISP zum “Lisp Community Mee- dungsbeispiele erw¨ahnt. ting” ein, um die Zukunft von LISP zu disku- tieren. Man kam zum Entschluß daß ein neu- er Dialekt “Common LISP” entwickelt werden 1 Geschichte und Motivation sollte. Dieser neue Dialekt sollte folgende Ziele erfullen.¨ Common LISP entstand in den achtziger Jah- ren aus Nachfolgern der Programmiersprache • Allgemeinheit: Common LISP soll als LISP. LISP wurde von John McCarthy in allgemeiner Dialekt gelten. In der Ver- den 50 Jahren erstmals definiert. Er woll- gangenheit fuhrten¨ Unterschiede zwischen te eine Sprache definieren die durch folgen- einzelnen MacLISP Dialekten oft zu In- de Ideen charakterisiert wird: rechnen mit kompatibilit¨aten. symbolischen Ausdrucken¨ und nicht mit Zah- len, Repr¨asentation von Symbolischen Aus- • Portabilit¨at: Common LISP sollte kei- drucken¨ und anderen Informationen als Lis- ne Features enthalten die nicht einfach tenstruktur im Speicher eines Computers, eine auf den meisten Hardwaresystemen imple- kleine Anzahl von Selektions- und Konstruk- mentiert werden k¨onnen. tionsoperationen, Kompositionsfunktionen als Werkzeug um komplexere Funktionen zu bil- • Konsistenz: Die meisten LISP Im- den, Bedingungsausdrucke¨ um Verzweigungen plementationen waren inkonsistent. Das ¨ in Funktionsdefinitionen zu erlauben, rekursive heißt, das der Ubersetzer und der Inter- Benutzung von Bedingungsausdrucken¨ sollen preter einem korrekten Code unterschied- liche Semantik zuweisten. In Common ∗MatNr. 9825286, e-mail: [email protected] LISP soll dieses Problem behoben werden. 1 • Ausdruckskraft: Konstrukte die sich in Obwohl es so aussieht als sei Common LISP alten Implementationen bew¨ahrt haben nicht Case-Sensitiv ist das nicht ganz korrekt. sollen beibehalten werden und schlechte Intern sind alle Funktionen groß geschrieben Konstrukte sollen aus gesiebt werden. definiert (zum Beispiel CDR, CONS, . ). Man kann sie allerdings auch mit (cdr ’(a b)) • Kompatibilit¨at: Common LISP soll aufrufen. Das liegt daran, daß der Interpre- kompatibel sein mit MacLISP und Inter- ter alle Zeichen in Großbuchstaben umwandelt, LISP etwa in dieser Reihenfolge. es sei den sie sind besonders gekennzeichnet. • Effizienz: Es sollte m¨oglich sein ein op- Mehr dazu im Abschnitt Symbole. timierenden Compiler fur¨ Common LISP Variablen in LISP sind grundstzlich typen- zu schreiben. los. Man kann ihnen allerdings Typen zuwei- sen, was speziell dem Ubersetzer¨ hilft besseren • Power: Common LISP sollte es erm¨ogli- Code zu erzeugen. chen Pakete zu erstellen und einzubinden aber keine bereitstellen. 2.2 Basistypen • Stabilit¨at: Nachdem Common LISP ein- Ich werde in den n¨achsten Abs¨atzen die wich- mal definiert wurde, sollte es sich nur noch tigsten Datentypen die Common LISP verwen- langsam und mit bed¨achtig ¨andern det kurz erl¨autern. In Common LISP gibt es folgende Basistypen. Definitiv keine Ziele sind[2] • integer • Grafik: Grafik Programme tendieren da- zu sehr Umgebungs abh¨angig zu sein. Dar- • ratio um spezifiziert Common LISP keine Gra- fik Befehle. • short-float • Multiprocessing: Obwohl einige geplan- • single-float te Implementationen Hilfsmittel bereit- stellen werden, ist Common LISP nicht fur¨ • double-float Multiprocessing vorgesehen. • long-float • Objekt orientiertes Programmieren: • float standard Gleitkommatyp, ublicher-¨ Objekt orientiertes Programmieren ist fur ¨ weise gleich single-float Common LISP nicht vorgesehen • complex 2 Syntax uns Semantik • character 2.1 Allgemeines ;integer Zahlen In den folgenden Abs¨atzen werde ich versu- 0 ; Zero chen die wichtigsten Aspekte der Syntax und −0 ;das gleiche Semantik von Common LISP dar zu stellen. #16 r f f ;255 Ausfuhrliche¨ Information zur Syntax und Se- #16rFf ;255 Common LISP ist mantik k¨onnen im Buch Common Lisp the ni c ht Case−S e n s i t i v e Language[5] nachgeschlagen werden. #12r2a ; −(2∗10ˆ12+11∗10ˆ0) = 34 2 ; r a t i o s namen auch durch zwei ’|’ umklammern. Das 2/3 ; bedeutet das die umklammerten Zeichen genau #2r10/11 ;2/3 so bleiben wie sie sind. ; f l o a t s abcdefg ;Das Symbol mit dem Namen −0. ;0.0 standard float ”ABCDEFG” 2.5s1 ;25.0 shoart−f l o a t AbCdEfG ; das Gleiche ; complex \ abcdefg ;Das Symbol mit #C( 3 . 6 4 2 l −2 −2.435d24) ;complexe dem Namen ”aBCDEFG” zahl | abcdefg | ;Das Symbol mit ; c h a r a c t e r dem Namen ” abcdefg ” #\n ;Zeichen ’n’ #\SPACE ;Zeichen ’ ’ 2.5 Die Symbole NIL und T 2.3 Conses, Listen und S- Das Symbol NIL beschreibt eine Leere Lis- Expressions te. Weiters wird es benutzt um boolsche Aus- Ein cons besteht aus zwei Elementen die car drucke¨ zu evaluieren (= 0 1) ⇒ NIL. Das und cdr genannt werden und wird notiert als Symbol T ist definiert als (not nil) ⇒ T (<car> . <cdr>) (die beiden Leerzeichen vor n i l ;=>NIL und nach dem Punkt sind relevant). Eine Liste t ;=>T wird Rekursiv definiert. Sie ist entweder eine ( not n i l ) ;=>T leere Liste nil oder ein cons dessen cdr ei- ( not 1) ;=>NIL ne Liste ist. Also ist eine Liste eine Kette von (= 1 2) ;=>NIL consen mit einem terminierenden nil[4]. Ei- ne Liste wird mit einer umkammerten durch Leerzeichen separierte Liste notiert. 2.6 Programmstruktur (4 . 2) ;ein cons mit car=4 und Ein Programm in Common LISP besteht aus cdr=2 einer Folge von formen. Ein form ist einfach ein (4 . (2 . nil)) ;das gleiche wie Datenobjekt das evaluiert werden soll. 2 ⇒ 2 (4 2) also eine Liste und (* 3 4) ⇒ 12 ( ⇒ bedeutet evaluiert zu). Alle in Common LISP darstellbaren Ausdrucke¨ Symbole werden in Common LISP als Namen sind sind S-Expressions. Eine S-Expression ist fur¨ Variablen und ¨ahnliches verwendet. Nach- entweder ein atom oder ein cons dessen car dem man (setq v 5) ausgefuhrt¨ hat evaluiert und cdr wieder eine S-Expression darstellen. v ⇒ 5. Ist das Datenobjekt eine Liste so no- tiert das erste Element einen Funktionsnamen 2.4 Symbole und die Restlichen die Funktionsparameter. Symbole dienen in LISP als Namen fur¨ Va- 2.7 Wichtige Funktionen riablen, Funktionen, Makros . Notiert wer- den sie einfach durch den Symbolnamen. Soll • quote: Eine der am h¨aufigsten verwende- ein Symbolname ein Sonderzeichen oder einen ten Funktion ist (quote x) ⇒ x. Diese Kleinbuchstaben enthalten, so ist ein ’\’ vor- Funktion evaluiert einfach zu x ohne das zustellen. Weiters kann man ein einen Symbol- x ausgewertet wird. Da quote sehr h¨aufig 3 verwendet wird kann man es durch ’x • loop <rumpf>:Fuhrt¨ eine Endlosschleife abkurzen.¨ aus die mit return unterbrochen werden kann. ( quote x ) ;=> x (setq a 10) ’(a 65) ;=> ( a 65) 3 Anwendungen (setq a 10) (list a 65) ;=> (10 65) Common LISP wurde in mehreren wirt- schaftlich orientierten Projekten erfolgreich angewandt allen voran die Yahoo! Sto- • list [a1 [a2 [...]]]: Evaluiert nach re web-commerce Internetseite. Weiters sind der Liste die die Parameter als Elemente erw¨ahnenswert: hat. (list 1 2 3 4) ⇒ (1 2 3 4) • Mirai: Izware LLC’s 2D/3D Graphic Pro- • car <cons> / cdr <cons>: Diese beiden gramm Funktionen liefern das car beziehungs- weise des cdr eines cons. Da eine Lis- • Xanalys Corp’s Investiagtions-Software: te durch eine Verkettung cons dargestellt Diese Programmlinie wird weltweit von wird evaluiert (car ’(a1 a2 ... an)) Polizei und Sicherheitsdiensten verwen- mit a1 und (cdr ’(a1 a2 ... an)) mit det. (a2 ... an) • ICAD: Eine der fuhrenden¨ Softwarepakte fur¨ mechanisches Design • cons <car> <cdr>: cons evaluiert zum Cons (<car> . <cdr>) Auch in der open-source Gemeinde wird Common LISP verwendet. • setq <Symbol> <Ausdruck>: Bindet das eine Variable an einen Wert. (setq a 13) • Maxima: Ein Computer Algebra System bindet das Symbol A an den Ausdruck 13. • Compo ist eine Sprache in der man kom- plexe musikalische Strukturen naturlich • defun <Name> (<Parameter>) <Rumpf>: ¨ Definiert eine neu Funktion. Der Name beschreiben kann kann ein beliebiges Symbol sein, die Para- Die NASA verwendet Common LISP Pro- meter sind eine Liste aus Symbolen. Der gramme wie zum Beispiel: Rumpf ist dann eine Folge von formen. Wobei das Ergebnis der form gleichzeitig • SPIKE: Das Zeitplanungs-System fur¨ das das Ergebnis der Funktion ist. Hubble Weltraumteleskop • Remote Agent: Gewinner der NASA Soft- • if <Bedingung> <Rumpf1> <Rumpf2>: ware of the Year Auszeichnung 1999 Wenn die Bedingung ungleich NIL ist dann evaluiert dieses Form zu Rumpf 1 ansonsten zu Rumpf2. 4 Besonderheiten • cond ((<b1> <R1>) ... (<bn> <Rn>)): • typenlose Variablen: Eine der Beson- Die Bedingungen werden der Reihe nach derheiten von Common LISP ist, daß es ausgewertet. und der Erste Zweig der typenlose Variablen verwendet. Es ist al- nicht NIL ausgefuhrt.¨ lerdings m¨oglich eine Variable auf einen 4 speziellen Typ zu restriktieren. Dies fuhrt¨ In einem Vergleichstest zwischen LISP, Java, im allgemeinen zu einer Performacesteige- C und C++ schneidet LISP sehr gut ab[1]. rung des Programms, speziell wird es dem Zahlentypen wie ratio oder bignum machen Ubersetzer¨ erleichtert Optimierungen vor- Common LISP praktikabel fur¨ allerlei numeri- zunehmen. sche Rechenaufgaben. • komplexe Zahlentypen: Common Lisp definiert Datentypen wie bignum oder Literatur ratio die es erm¨oglicht mit komplexen Zahlenformaten effektiv zu rechnen. Ein [1] Erann Gat. Point of view: Lisp as an al- Programm wie zum Beispiel ternative to java.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    5 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us