Zum Inhalt springen

Benutzer:Kajk/Lisp/Old

Aus Wikibooks

Dieses Buch steht im Regal EDV.

Schiebt es bitte dann in die Kategorie zu AutoLisp wenn jemand etwas besseres zu Lisp hat ;)))


Es ist ein Rohkonzept mit Fehlern !!! Korekturen sind deshalb erwünscht.


Ich beschreibe eine Einleitung in die Programmierung mit Lisp am Beispiel in dem AutoCAD eingebauten AutoLISP. AutoLisp ist sehr leistungsfähig.

Es ist ein Lisp-Dialekt plus der Möglichkeit in AutoCAD 3D-Geometrien zuerstellen, diese auswerten und weiter zu bearbeiten. Es kann also zur Abfrage der in der AutoCAD-Datei *.dwg enthaltenen Geometrieelemente genutzt werden, sowie es bietet die Möglichkeit zur Eingabe von Koordinaten und Geometrieelementen mittels dem in AutoCAD vorhandene Zeigegeräten.

Diese Einführung ist von einem Maschinenbauer für einem interssierten Maschinenbauer (CAD-Konstrukteur) und Informatiker gedacht. Bitte schauen Sie sich das Beispiel unter der Funktion (equal etwas genauer an.


Die Grundidee der Programiersprache Lisp besteht darin, daß man in Klammern () gesetzte Ausdrücke durch den eingebauten LispInterpreter logisch abarbeitet.

In der Programiersprache Lisp bestehen Listen immer aus einer öffnenden Klammer ´(´, beliebig vielen Elementen (symbolischen Ausdrücken), und einer abschließenden Klammer ´)´

Kleiner Tip: Immer wenn man eine sich öffnende Klammer schreibt, sollte man sofort die abschließende Klammer schreiben...


Definitionen: Eine Liste ist vereinfacht gesagt ein geklammerter Ausdruck () Eine Liste kann eine logische Funktion sein oder einen Wert representieren oder eine Verkettung von Werten oder Listen sein. Das Ergebnis einer Funktion in Lisp ist wiederum eine Liste.


Reservierte Worte: nil ein Symbol für eine leere Liste () Eine leere Liste hat den Wert nil (not in list) T hat den logischen Wert true, also wahr.


Definitionen von Variablen: Die Definition von Variablen erfolgt mit der Funktion (setq ) (setq eineVariable einWert) Im Ergebnis erhält man eine Liste eineVariable mit den Wert einWert. Lisp kennt Ganze Zahlen, reelle Zahlen, Zeichenketten sowie Listen als Funktionswerte. Hinweis: Die Funktion (setq a <ein Ausdruck>) ist die Form der Wertzuweisung an a und hier in Lisp gleichzeitig die Definition der Variablen (eigentlich der Liste) a, die man in Pascal a:=<ein Ausdruck>; und in Basic a=<ein Ausdruck> kennt.

Beispiel (setq zahlNeun 9) zahlNeun (9) (setq ZahlDrei 3) zahlDrei (3) (defun ZahlVier 4) ZahlVier (4)

(setq Startpunkt (x1 y1 z1)) (setq Endpunkt (x2 y2 z2))


Ein Liste mit den Werten(x1 y1 z1) kann z.B die Definition der Koordinaten x,y,z eines Punktes sein.

Die geometrischen Werte eines Punktepares, z.B. einer Linie, sie besteht aus einen Start- und Endpunkt, kann man in Lisp z.B. auf 2 Arten speichern.

Natürlich in einer Werteliste (x1 y1 z1 x2 y2 z2) Das würde einer Notation in der Form (1 2 3 4 5 6) entsprechen.

Etwas strukturierter wäre die Speicherung der Koordinaten in der beiden Punkte in 2 einzelnen Listen und der anschließenden Zusammenfassung der Listen in einer verketteten Liste etwa so: (

Startpunkt
Endpunkt

) das kann so aussehen: ( (x1 y1 z1)

 (x2 y2 z2)

) Mit den Zahlenwerten würde das so aussehen: ((1,2,3)(4,5,6))

Die verkettete Liste besteht also aus 2 eingefügten Listen (x1 y1 z1) und (x2 y2 z2).

Wenn man Startpunkt (x1 y1 z1) Endpunkt (x2 y2 z2) jeweils als eine einzelne Liste bereits vorliegen hat. Kann man beide zur Definition eines Punktepaares (Startpunkt Endpunkt) mit der Funktion ... zusammengefassen. (setq PunktePaar ....)

Beim Auswerten der Liste müßte der Computer, wenn man für Startpunkt (x1 y1 z1) und für Endpunkt (x2 y2 z2) einsetzt wieder ( (x1 y1 z1) (x2 y2 z2)) verarbeiten müssen.

die wichtigsten Datentypen in Lisp sind Datentyp Typ Beispiel Integer Zahl 124 Real Zahl 0.618 String Zeichenkette 'Hallo Welt' List Liste (4.7021 6.6011 3.0)


Definition von Funktionen in Lisp (Funktionsname Argument1 Argument2 Argument...)

Berechnungsfunktionen: (+ Argument1 Argument2 Argument...) Addition (- Argument1 Argument2 Argument...) Subtraktion (* Argument1 Argument2 Argument...) Multiplikation (/ Argument1 Argument2 Argument...) Division (max Argument1 Argument2 Argument...) gibt die größte Zahl zurück (min Argument1 Argument2 Argument...) gibt die kleinste Zahl zurück (rem Argument1 Argument2 ) gibt .... zurück

Beispiel Multipikation 3x4

Beispiel 1 (* 3 4) Ergebnis (12)


Beispiel 2 (setq ZahlDrei 3) (setq ZahlVier 4)

(* ZahlDrei Zahlvier) hat das Ergebnis (12)

Die folgende Addition (+ 3 4 5 6 7 8 9) hat das Ergebnis 42


(+ (/ 20 2) (* 3 4)) ergiebt (+ 10 12) also (22)

weitere Berechnungfunktionen (1+ Zahl) adaiert zu Zahl den Wert 1 (1- Zahl) subtrhiert zur Zahl den Wert 1 (abs Zahl) ermittelt den Betrag der Zahl (exp nth) (expt number nth) (fix real) wandelt eine Reale Zahl in einen Integer Zahl (float integer) wandelt eine Integer Zahl in eine Reale Zahl (gcd integer integer) (log Zahl) (sqrt Zahl) Quatratwurzel der Zahl


Textfunktionen


Funktionen zur Listenauswertung

Die Funktion equal vergleicht die Identität der Liste1 mit der Liste2 (equal Liste1 Liste2)

(equal 5 5) ergibt T also true (equal 5 7) ergibt nil also ()

Beispiel: Kann man eine Linie mit Startpunkt und Endpunkt zeichnen?? (setq Startpunkt 2 3 4) (setq Endpunkt 4 5 4)

Sind die Koordinaten von Punkt 1 und Punkt 2 identisch also T kann man leider keine Linie zeichen. Ein Vergleich in Lisp mit der Funktion (equal ) beantwortet uns diese Frage. (equal Startpunkt Endpunkt) nil In AutoCAD wäre das Zeichnen einer Line mit den Befehl (command "Line" Startpunkt Endpunkt) also möglich. um das nachzuprüfen geben Sie bitte das folgende in die Befehlszeile (auch per cut und paste) von AutoCAD ein:


(setq Startpunkt 2 3 4) (setq Endpunkt 4 5 4) (equal Startpunkt Endpunkt) (command "Line" Startpunkt Endpunkt nil) oder zuletzt line !Startpunkt !Endpunkt ein.

Funktionen definiert man in Lisp mit der Funktion (defun (defun Argument1 Argument2 Argument...

<hier stehten die Funktionsanweisungen>
)

Als Funktionsergebnis erhält man wieder eine Liste.

Die Funktion quote verhindert die Auswertung einer Liste.

Beispiel (quote x1 y1 z1) Diese Liste (x1 y1 z1) würde während des Programmablaufes wegen der Funktion quote nicht ausgewertet werden dürfen. Es wird hier als Ergebnis die Liste (x1 y1 z1) zurückgegeben werden. (quote (+ 9 10)) hat das Ergebnis (+ 9 10)

Würde aber (x1 y1 z1) im Programmtext stehen, würde Lisp die Funktion x1 mit den Variablen y1 und z1 abzuarbeiten. Also (+ 9 10) hat das Ergebnis (19) da die Verhinderung der Auswertung mit Funktion(quote )fehlt


allgemeine Definitionen in Lisp Atome (wortähnliche Objekte) -numerische Atome (Zahlen, engl. numbers) 1 2 -4 3.14 -8.5 9.02E+23 -Symbole: alle Zeichenfolgen, außer Klammern, Anführungszeichen, Kommata, Leerzeichen symb123 noch-einsymbol t false nil

- Strings: Zeichefolgen in hochgestellten Anführungszeichen “Dies ist ein String“ ““ “9“

- Listen (Beschreibung satzähnlicher Objekte) bestehen aus einer öffnenden Klammer ´(´, beliebig vielen Elementen symbolischen Ausdrücken), und einer abschließenden Klammer ´)


AutoCAD spezifische Funktionen in Lisp: Die folgenden Funktionen sind nur im AutoLisp enthalten.


(getvar <Name einer Systemvariablen>) gibt den Wert einer im AutoCAD definierten Systemvariablen zurück.

(setvar <Name einer Systemvariablen> Wert) setzt der in AutoCAD definierten Systemvariablen auf den Wert. Tip: Nicht alle Systemvariablen können mit dieser Funktion geändert werden.

Eingabefunktionen in AutoCAD (ssget erlaubt die Erstellung eines Auswahlsatzes, einer "Multiselektion" von Geometrieelementen in AutoCAD. Tip: Mit dem dieser Funktion erzeugten Auswahlsatz (Liste) können Geometrieelemente mit Lisp hinzugefügt oder auch entfernt werden.

Getpoint Erlaubt die Eingabe eines Punktes mit der Maus oder durch Angabe eines Koordinaten eines Punktes. Es wird immer ein Punkt oder Nil zurückgegeben. (setq pt1 (getpoint)) (setq pt1 (getpoint "Erster Punkt:"))


Getcorner Erlaubt die Eingabe eines Punktes mit der Maus oder durch Angabe eines Koordinaten eines Punktes. Gleichzeitig wird ein Fenster vom letzten Punkt oder einen vorgegebnen Bezugspunkt pt1 aufgezogen. Es wird immer ein Punkt oder Nil zurückgegeben. (setq pt2 (getcorner pt1 "Zweiter Punkt:"))

Getorient Erlaubt die Eingabe eines Winkelrichtung??.

Getangle Erlaubt die Eingabe eines Winkelwertes.

Getdist Erlaubt die Eingabe eines Abstandes durch einen Punkt mit der Maus oder durch Angabe eines Koordinaten eines Punktes .

Hinweise Der Fangmodus kann durch die F9 Taste oder durch die Systemvariable ... ein oder ausgeschaltet werden. Die dynamische Koordinatenanzeige kann durch die F6 oder durch die Systemvariable ... ein oder ausgeschaltet werden.



[[Kategorie:Buch]] [[Kategorie:EDV]]