Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Programmieren mit LISP

Ähnliche Präsentationen


Präsentation zum Thema: "Programmieren mit LISP"—  Präsentation transkript:

1 Programmieren mit LISP
Thomas Trieschmann Matr.-Nr

2 Inhaltsübersicht 1.: Entstehungsgeschichte LISP 2.: Datenstruktur LISP
3.: LISP Werkzeuge 4.: Anwendungen LISP AutoLISP New LISP Emacs LISP (ELISP) 5.: Praxisbeispiel -Verifikation Adresse -Idee zur Umsetzung eines weiteren Beispiels

3 Entstehungsgeschichte
Erste Version entsteht in 1950er Jahren Seitdem viele Varianten Spezielle Versionen für bestimmte Anwendungen Seit 1994: COMMON LISP hat ANSI- Standard Erweiterung: COMMON LISP OBJECT SYSTEM (CLOS), Zweck: Integration objektorientierter Konzepte in LISP

4 Datenstruktur LISP Datentypen: Atome Listen Beispiel siehe whiteboard
Symbole z.B.: SETQ D (näheres später) Zahlen z.B.: Listen Beispiel siehe whiteboard Namensgeber der Sprache: list processing =>LISP In Referat: Seite 3.3 Beispiel für eine Liste zeigen

5 Beispiel Hauptmerkmal, wenn mit LISP programmiert wird:
Klammernotation Hello World: (Defun c:HelloWorld () (princ „\nHello World“ )

6 LISP Werkzeuge I function z. B.: ( + 3 (* 4 5 ) ) => 23
if Bedingte Ausführung quote verarbeitet let Neue Umgebung für lokale Variable ( => Kurvendiskussion) progn Führt mehrere Anweisungen nacheinander aus setq Einfache Variablenzuweisung (siehe Beispiel Verifizierung) Es gibt noch viele weitere Funktionen, wie wir auch am späteren Beispiel sehen werden.

7 LISP Werkzeuge II Arrays und Vektoren (=> lineare Algebra)
LISP ist eine „programmierbare Programmiersprache“ Makros dienen dazu, LISP-Ausdrücke in andere LISP Ausdrücke zu transformieren Schachtelung bewirkt komplexere symbolische Ausdrücke Beispiel s. whiteboard Beispiel für Schachtelung: Seite 141 `86er unten

8 Anwendungen LISP Künstliche Intelligenz (Mathematik)
Mathematische Formelmanipulation Für Anwendungsprogramme: Der Dialekt AutoLISP ist Bestandteil von AutoCAD . Hiermit lassen sich u.a. geometrische Figuren zeichnen und Abstände berechnen Manipulation=Handhabung

9 New LISP Gedacht als Skriptsprache (=> für kleinere und mittlere Aufgaben) Verzichtet auf umständliche Verschachtelungen bzw. Implementierungen Ist komplett in C geschrieben Ziel: Transparenz und Übersichtlichkeit Skriptsprache =

10 Emacs LISP Der Dialekt Emacs LISP wird zur Programmierung von Editoren benutzt. Als Editoren werden vor allem GNUEmacs und Xemacs verwendet Mit Hilfe von Emacs LISP können diese auch erweitert werden. Besonderheit: Emacs LISP kann Quelltext in Byte-Code übersetzen (vergleiche Java) =>Zweck: Verringerung Speicherplatz, schnellere Ausführung

11 Anwendung: Verifizierung einer E-Mail Adresse Vorgehensweise:
5.1: Prüfung des local-Parts 5.2: Prüfung 5.3: Prüfung des domain-Parts 5.4: Prüfung Kürzel am Ende

12 5.1.1: Prüfung local Part Automatische Umwandlung Kleinschreibung in Großbuchstaben Grundgerüst: Mit der Funktion POSNLIS werden die Buchstaben in Zahlen umgewandelt Dazu: Aufstellung der Buchstabenliste „Alpha“: (SETQ ALPHA '(ABCD XYZ)) Als nächstes: Ein Programm, welches die Liste X aus den Buchstaben des local-Parts einliest und anschließend eine Zahlenliste ausgibt: (DEFUN POSNLIS (X) ; Name der Liste lautet X ((NULLX) NIL) ;Wenn Liste leer ist, beenden (CONS (POSITION (CARX) ALPHA) ;Wandelt Buchstaben nach- (POSNLIS (CDRX) ))) ;einander um =>Zahlenliste

13 5.1.2: Prüf. Sonderzeichen ._-+
Wie werden die Sonderzeichen geprüft? (SETQ.'(27)) ; Mit SETQ wird dem (SETQ_'(28)) ; jeweiligen (SETQ-'(29)) ; Sonderzeichen (SETQ+‚(30)) ; eine Zahl zugewiesen Nun muss noch geprüft werden, dass der local-Part aus 1-64 Zeichen besteht: Zunächst wird eine Zahlenliste Y definiert, die die Liste X enthält und ggf. die Werte 27, 28, 29,30: (SETQ Y'(X 27 30))

14 5.1.3:Prüfung Sonderzeichen
Jetzt wird die Anzahl der Elemente in dieser Liste Y gezählt: (DEFUN LIST-LENGTH'(Y) =>Z) ; Anzahl Elemente heißt Z Die Prüfung geht noch weiter: (SETQ A'( ) ; A wird als variable zw. 1 und 64 definiert Schließlich wird geprüft, ob Z (tatsächliche Anzahl) in A enthalten ist: (EQ 'A 'Z) => T ; true, Z ist in A enthalten, gültige Länge (EQ 'A'Z) => NIL ; Falsch, ungültige Länge des local-Parts EQ ist eine Vergleichsfunktion.

15 5.2: Prüfung des @-Zeichens
Analog zu den Sonderzeichen wird definiert: '(31)) Definition einer Vergleichsliste: (SETQB'(31)) Durchführen des Vergleichs: (EQ => T oder: (EQ => NIL

16 5.3.1: Prüfung domain-Part Zunächst: Umwandlung von Kleinschreibung in Großbuchstaben erfolgt automatisch (vgl. local-Part) Analog zum local-Part: Umwandeln der Buchstaben (nicht -) in eine Zahlenliste: (SETQ DALPHA '(A B C ... X Y Z)) ; Definition Buchstaben (DEFUN POSNLIS (D)) ; Name Liste = D ((NULL D) NIL) ; Wenn D leer => Ende (CONS (POSITION((CAR D) DALPHA) ; Alle Buchstaben (POSNLIS (CDR D) ))) ; werden nach- ;einander in Zahlen umgewandelt

17 5.3.2: Prüfung der labels Zunächst: Prüfung, dass das 1. und letzte Zeichen der labels keine – sind: Die Funktion NUMBERP prüft, ob ein Objekt eine Zahl ist: NUMBERP (1.Zeichen label letzte Zeichen der label) => T ; Zeichen sind gültig NUMBERP (1.Zeichen label letzte Zeichen der label) => NIL ; mindestens ein ungültiges Zeichen Anschließend: (SETQ-'(29) ; Dem Minuszeichen wird eine Zahl zugewiesen.

18 5.3.3: Prüfung Länge label(s)
Es wird eine Zahlenliste E definiert, sie enthält die in DALPHA ermittelten Zahlen und ggf. 29 (für -): (SETQ E'( )) Die Anzahl der Elemente in wird ermittelt: (DEFUN LIST-LENGTH‚(E) => W; Die Anzahl der Elemente heißt W Ob W eine gültige Anzahl von Zeichen enthält, wird wieder durch Vergleich ermittelt: (SET F'( )) ; F ist Variable zw. 1 und 63

19 5.3.4: Gültige Länge label? (EQ 'F'W) => T ; W liegt in F => label hat gültige Länge (EQ 'F'W) => NIL ; W liegt nicht in F=> label ist ungültig 5.3.5: Gültige Gesamtlänge des domain-Parts? Hierfür wird zunächst der Punkt . in eine Zahl umgewandelt: (SETQ. '(32))

20 5.3.5: Gültige Gesamtlänge domain-Part ?
Jetzt wird wieder eine Liste erzeugt, die alle Zeichen und Buchstaben des domain-Parts in Zahlen umwandelt: (SETQ GALPHA,(E1 E2 ....E3 31)) Anschließend wird die Anzahl der Elemente in GALPHA ermittelt: (DEFUN LIST-LENGTH'(GALPHA) => V; Anzahl Elemente = V Nun: Definition einer Vergleichsvariablen: (SETQ G'( ))

21 5.3.6: Prüfung auf gültiges Endkürzel
5.3.5: Vergleich (EQ'G'V) => T ;V (tatsächliche Zahl Elemente) liegt in G (EQ'G'V)=> NIL ; V liegt nicht in G 5.3.6: Prüfung auf gültiges Endkürzel Zunächst wird dem Punkt eine gültige Zahl zugewiesen: (SETQ.'(256))

22 5.3.6: Prüfung Endkürzel Jeder gültigen Endung wird ein Zahlenwert zugewiesen: (SETQde'(257)) (SETQcom'(258)) usw. Anschließend wird eine Vergleichsliste erstellt, die alle gültigen Kürzel enthält: (SETQH'( )) Die tatsächliche Endung der -Adresse wird nun auch als Liste definiert: (SETQI'(256 Zahl f. jeweilige Endung)

23 5.3.6: Prüfung Endkürzel (EQ'I'H) => T oder (EQ'I'H)=> NIL
Abschließend erfolgt wieder ein Vergleich: (EQ'I'H) => T oder (EQ'I'H)=> NIL Das war die Verifizierung einer -Adresse

24 Weiteres Beispiel: Entwickeln eines Programms in LISP
Ziel: Programm soll Periodizität einer Buchstabenreihe erkennen BADCFEHGJIL? Vorschlag: Buchstaben in Zahlen umwandeln, In der Reihe Untergruppen bilden Differenzen in Untergruppen auf Zahlenreihe untersuchen

25 Vielen Dank für die Aufmerksamkeit
Meine Datenquellen: Schoffa:„Die Programmiersprache LISP“ Henning/ Vogelsang: „ Programmiersprachen“ Association of Lisp Users (


Herunterladen ppt "Programmieren mit LISP"

Ähnliche Präsentationen


Google-Anzeigen