Ein paar Worte vorabHome   Letzte MeldungenNews   Index der Kapitel und der besprochenen FunktionenIndex   Wer ich bin, warum ich diese Seiten mache, KontaktImpressum   Ich freue mich über jeden Eintrag im Gästebuch!Gästebuch   Einige Links zu anderen AutoLisp-SeitenLinks   Copyrights und DisclaimerRechts
Hier können die kompletten Seiten als ZIP-File heruntergeladen werden!

Berechnen von arithmetischen Ausdrücken in der Kommandozeile Sitz!Platz!Fass!
Das Verschachteln von Ausdrücken Alte Schachtel!
Das Speichern von Werten in Variablen Gebunkert
Verhindern der Evaluation mit Quote Bergbäche
Erzeugen von einfachen Listen in AutoLisp Brot,Eier,Käse
Einfache Funktionen zur Listenbearbeitung ...um die Wurst
Funktionen für den Zugriff auf Listenelemente Was ein Salat!
Über Haupt- und Nebeneffekte von Funktionen Schwer schuften
Das Definieren von eigenen Funktionen in AutoLisp Ostfriesischer...
Lokale Variablen und Funktionsargumente in AutoLisp Kondome!
Das Laden von Programmdateien in AutoLisp Banküberfall
Verzweigung in Funktionen aufgrund von Entscheidungen Wenn das Wort...
Zusammenfassen von Entscheidungen mit den Logik-Funktionen Ins Schweinderl
Mehrfach-Verzweigungen in AutoLisp mit Cond 3. Strasse links
Schleifen zum Steuern des Ablaufs in AutoLisp-Funktionen Wie im Fernsehen
Testfunktionen zum Steuern von Schleifen in AutoLisp Schwanger?
Gleichheitstests als Schleifenkriterium in AutoLisp Noch gleicher?
Zeichneketten-Bearbeitung in AutoLisp Rauchzeichen
Funktionen zur Konvertierung von Datentypen in AutoLisp Wasser zu Wein
Komplexere Funktionen für die Bearbeitung von Listen in AutoLisp Nicht arbeiten...
Das Erzeugen von anonymen Funktionen mit lambda Schwarze Kutte
Das Bearbeiten von Listenelementen mit foreach Jedem das Seine
Erzeugen und Verwenden von Assoziationslisten in AutoLisp Beim Psychiater
Zugriff auf Geometriedaten und Erzeugen von Geometrieelementen Ententanz
Der Umgang mit Auswahlsätzen in AutoLisp Jung gefreit, ...
Auswahl von AutoCAD-Zeichnungsgeometrie mit ssget Raffgierig!
Verändern von Zeichnungs-Geometrie mit entmod Flickschusterei
Das Erzeugen von Geometrie mit entmake Houdini
Über Programmierstile in AutoLisp, Teil 1 Emma
Über Programmierstile in AutoLisp, Teil 2 Sti(e)lblüten
Über Programmierstile in AutoLisp, Teil 3 Eingewickelt
Über Programmierstile in AutoLisp, Teil 4 Doofe Frisur?


Zum den Seiten für Fortgeschrittene

Zu den ActiveX-Seiten

Meine Private HP mit Fotos, Gedichten, Musik und Postkartenversand

Mein Online-Lexikon der Fotografie

Mein völlig abgedrehtes Reisebüro










Im ersten Kapitel haben wir uns mit der Eingabe ganz einfacher Rechenausdrücke auf der AutoCAD-Kommandozeile befasst, die an AutoLisp weitergegeben und dort evaluiert werden. Schön und gut, aber was wir bisher kennen, leistet jeder Taschenrechner auch, den wir beim Kauf von 3 Paar Socken im Kaffeeladen dazugeschenkt kriegen. Also gleich noch ein paar weitere Funktionen, die man so ab und zu gebrauchen kann:
(sqrt 2)      => 1.41421
; Zieht die Wurzel und lässt sich von
; Ganzzahlen nicht beeindrucken

(abs -3)      => 3
; Gibt immer den Absolutwert (positiven
; Betrag) einer Zahl zurück

(cos pi)      => -1
; (cos) arbeitet immer mit dem Bogenmass.
; pi ist in LISP vordefiniert und kann
; einfach so eingegeben werden.

(sin 1.234)   => 0.94318

(exp 3)       => 20.0855
; berechnet e hoch 3

(expt 10 3)   => 1000
; Bedeutet 10 hoch 3

(expt 7 2)    => 49
; Bedeutet 7 hoch 2 (bedeutet
; 7 zum Quadrat)
Auf die mathematischen Funktionen soll hier nicht allzusehr eingegangen werden - sie sind einfach anzuwenden, aber teilweise von der Mathematik her nicht so ganz einfach. Da dies aber kein Mathe-Tutorial ist, wird in dieser Hinsicht also nur das notwendigste behandelt.

An dieser Stelle können wir ganz unauffällig auch noch eine kleine Neuerung einflechten: Ausdrücke können in LISP verschachtelt werden. Ein Beispiel: wir wollen die dritte Wurzel aus 10 berechnen. Es gibt dafür keine direkte Funktion (sqrt berechnet nur die Quadratwurzel). Wir müssen uns also mit der Ersatzkonstruktion 10 hoch (1/3) behelfen. Dazu verschachteln wir ganz einfach:
(expt 10(/ 1 3))           => 1
; Die dritte Wurzel aus 10 soll
; 1 sein? Wo liegt der Fehler?

(expt 10(/ 1.0 3))         => 2.15443
; Das sieht doch schon wesentlich
; besser aus - nicht wahr?

(expt(expt 10(/ 1.0 3))3)  => 3.0
; (Dritte Wurzel aus 10) hoch 3 = 3,
; so muss es sein. Schön aufpassen beim
; Eingeben, nicht vertippen, keine
; Leerstellen vergessen!
Und noch ein paar weitere Funktionen, die wir gar nicht grossartig erklären müssen:
(min 5 7 13 1 4 2 13) =>  1
; kleinstes Element

(max 5 7 13 1 4 2 13) =>  13
; grösstes Element

(log 100)             => 4.60517
; natürlicher Logarithmus von 100

(rem 50 7)            =>  1
; gibt nur den Rest wieder, der bei
; einer Ganzzahldivision übrigbleibt.
Wir haben nicht alle mathematischen Funktionen abgehandelt, es sollte aber genügen, um sich den Umgang mit den restlichen Rechenfunktion selbst anzueignen.

Nun noch ein paar Bemerkungen zu Reihenfolge, in der Ausdrücke von LISP abgearbeitet werden: LISP evaluiert die Elemente eines Ausdrucks im Prinzip von links nach rechts, d.h. in der Reihenfolge, wie sie in der Klammer stehen. Liegt eine Verschachtelung vor, wird immer in der innersten Ebene angefangen und nach aussen gearbeitet. Die Kombination dieser beiden Richtungen ergibt die Reihenfolge. Dazu ein paar Beispiele:
(*(+ 2 3)(- 6 2))   => 20
Zunächst wird die linke innere Klammer aufgelöst:
(+ 2 3) => 5.
Dann folgt die rechte innere Klammer:
(- 6 2) -> 4.
Erst jetzt kann der äussere Ausdruck evaluiert werden:
(* 5 4) -> 20.
Die Reihenfolge unterscheidet sich also nicht von der, die auch ein Mensch beim Kopfrechnen anwendet (jedenfalls meistens).
(+(*(- 9 2)3)(*(-(* 3 4)2)3))
Das Ergebnis wir hier absichtlich nicht genannt, finden Sie es selbst (Kopfrechnen!) heraus und überprüfen Sie es dann mit LISP. Angefangen wir auf jeden Fall mit dem ersten Argument für die Addition (Link-vor-Rechts), und da mit der innersten Ebene (Innen-vor-Aussen), d.h. der Ausdruck (- 9 2) wird als erstes berechnet.

Soweit also zu Ausdrücken in LISP und ihrer Eingabe in die Kommandozeile. Wichtig sind folgende Sachverhalte, die wir gelernt haben:
  • Ausdrücke, die von Lisp interpretiert werden sollen, werden geklammert eingegeben.
  • Das erste Element in der Klammer muss die Funktion sein.
  • Nach dem Funktionsname kommen die Argumente.
  • Die Anzahl der Argumente hängt von der Funktion ab.
  • Manche Funktionen erforden eine bestimmte Anzahl von Argumenten, andere können mit beliebig vielen Argumenten aufgerufen werden.
  • Jedes Argument einer Funktion kann durch einen weiteren Funktionsaufruf ersetzt werden (Verschachtelung) .
  • Beim Abarbeiten (Evaluieren) von Ausdrücken gilt erstens die Links-vor-Rechts-Regel und zweitens die Innen-nach-Aussen-Regel.
  • Beim Arbeiten mit der Funktion (/) muss sorgfältig zwischen Ganzzahlen und Realzahlen unterschieden werden.

Übungsaufgaben

  1. Nennen Sie ein Beispiel für eine Lisp-Rechenfunktion, die beliebig viele Argumente erhalten kann.

  2. Stellen Sie sich vor, Sie haben mit einer Zeichnung zu tun, die in 12 x 12 Planquadrate unterteilt ist, welche von 0 (links unten) bis 143 (rechts oben) durchnummeriert sind. Welche der hier besprochenden Rechenfunktionen benötigen Sie, um herauszubekommen, in welcher Spalte (vertikal!) ein bestimmtes Quadrat liegt?

  3. Berechnen Sie in der Kommandozeile:
    die dritte Wurzel aus 100
    die vierte Wurzel aus 1000
    die Zahl e
    den Cosinus von pi/2
    den Sinus von pi/4
    den Sinus von 45°
    den Cosinus von 30°

  4. Welche der folgenden Eingaben verursachen eine Fehlermeldung?
    (+(+))
    (*(+ 3 4(- 6 3))6))((- 5 9)
    (cos 30 45 60)
    (+ pi pi)
    (exp 100)
    (expt 100)

  5. Nennen Sie mindestens drei Beispiele für Lisp-Rechenfunktionen, die immer nur ein Argument erhalten. Fallen Ihnen noch weitere Funktionen ein, die es in Lisp wohl ebenso geben wird, die Sie aber noch nicht kennen, und die auch nur ein Argument haben können? Nennen Sie ausserdem drei Beispiele für Funktionen, die mindestens zwei Argumente benötigen.

  6. Beschreiben sie noch einmal die Unterschiede zwischen Infix-, Präfix- und Postfix-Notation.

  7. In welcher Reihenfolge bzw. Richtung werden die Bestandteile verschachtelter Ausdrücke in AutoLisp evaluiert?

  8. Wenn wir den Ausdruck (xyz 1 2 3) auf der Kommandozeile eingeben und keine Fehlermeldung erhalten, was muss dann xyz sein?

Lösungen