Programmieren mit LISP

Slides:



Advertisements
Ähnliche Präsentationen
Imperative Programmierung
Advertisements

Hash-Tabellen und -Funktionen Hash-Tabellen in Java
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Forschungszentrum caesar
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Variablen und Datentypen
Zusammenfassung der Vorwoche
10. Grundlagen imperativer Programmiersprachen
Seminar Stochastik im WS 02/03
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Imperative Programmierung -Entwicklungswerkzeuge
der Universität Oldenburg
FH-Hof Einbindung von JavaScript Anweisungen
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
FH-Hof SQLJ Richard Göbel. FH-Hof SQLJ - Idee Erweiterung von Java um SQL Die Verwendung von SQL-Anweisungen innerhalb einer Programmiersprache wird vereinfacht.
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Datentyp- umwandlung. Literale sind: Bezeichner mit einem festen Wert wie z.B:
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Robotik mit LEGO Mindstorms
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
GESCHICHTE DER INFORMATIK
Modularisierungstechniken
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
Zusammenfassung Vorwoche
DVG Klassen und Objekte
Marcus Haller & René Schulze
1 Vorlesung 3 Verschiedenes Peter B. Ladkin
Was steht hier eigentlich in den Räumen rum?
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Java programmieren mit JavaKara
INHALT INHALT Inhalt Delphi IDE ObjectPascal Hello World! Delphi IDE
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy.
Debugging in Lua Universität zu Köln Re-usable Content in 3D und Simulationssystemen Prof. Dr. Manfred Thaller Referent: Artur Wilke.
Grundlagen der Programmierung
Efficient Alias Set Analysis Using SSA Form Proseminar Programmanalyse WS 11/12 André Hunke.
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
PHP Basic.
Variablenkonzept Klassisch, in Java Basistyp
1. Entwicklungsumgebung 2. Kontextmenü 3. Compile 4. Objekt 5. Attribut 6. Klasse 7. Deklaration 8. Intialisierung.
Hilfe Dokumente.
Datentypen: integer, char, string, boolean
Agenda für heute, 14. April, 2005 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
BMEVIEEA100 Grundlagen der Programmierung
PHP: Operatoren und Kontrollstrukturen
Programmieren ... in C++ Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I.
Zeichenketten in PASCAL
Vortrag: Frames & Javascript.
Programmiervorkurs WS 2014 Referenzdatentypen
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
1 Tagesüberblick 4 Lösung Hausaufgabe/Fragen Mustervergleiche.
Vom graphischen Differenzieren
Java-Kurs Übung Besprechung der Hausaufgabe
Einführung in die Programmierung mit Java
Extended Pascal ( Erweitreung von Pascal) Name: Mehmet CELIK Matr :
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Seminar Internettechnologie Prof. Dr. Lutz Wegner Julia Mikov WS 06/07
Datentypen: integer, char, string, boolean
 Präsentation transkript:

Programmieren mit LISP Thomas Trieschmann Matr.-Nr. 26203111

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

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

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

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

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.

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

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

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 =

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

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

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

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))

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'(1 2 ... 64) ; 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.

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

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

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.

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'(1 2 3 .... 29)) 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'(1 2 3 .... 63)) ; F ist Variable zw. 1 und 63

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))

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'(1 2 .... 255))

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))

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'(256 257 258 ....)) Die tatsächliche Endung der E-mail-Adresse wird nun auch als Liste definiert: (SETQI'(256 Zahl f. jeweilige Endung)

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 E-mail-Adresse

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

Vielen Dank für die Aufmerksamkeit Meine Datenquellen: Schoffa:„Die Programmiersprache LISP“ Henning/ Vogelsang: „ Programmiersprachen“ Association of Lisp Users (http://www.lisp.org/alu/home)