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










Über die AutoCAD-Kommandozeile kann der Benutzer direkt mit AutoLISP kommunizieren. AutoCAD erkennt eine an LISP gerichtete Eingabe daran, dass die Eingabe mit einer linken (öffnenden) Klammer beginnt. Ist dies der Fall, leitet AutoCAD die Eingabe an AutoLISP weiter. Auch eine AutoCAD-Eingabe, die mit einem Ausrufungszeichen beginnt, wird an LISP weitergeleitet, doch diese Art der Eingabe wird aber erst später behandelt.

Der einfachste Fall einer geklammerten Eingabe an LISP kann z.B. so aussehen:
(+ 3 4)
Diese Eingabe bewirkt, dass LISP die beiden Zahlen addiert und das Ergebnis am Bildschirm ausgibt. Diesen Vorgang nennt man Evaluation des Ausdrucks und Rückgabe des Ergebnisses. Im Folgenden wird dieser Vorgang so dargestellt:
(+ 3 4)    =>  7
Dies ist keine exakte Bildschirmabbildung, sondern eine Schreibweise, die anzeigt, was eingegeben wurde (links vom Pfeil) und was AutoLISP zurückgibt (rechts vom Pfeil).

Etwas ungewöhnlich mag die Reihenfolge sein, in der die Elemente des Ausdrucks angeordnet sind. Wir sind alle mit der mathematischen Schreibweise vertraut, bei der das Pluszeichen zwischen die beiden Zahlen gesetzt wird (3 + 4 = 12). Von dieser Gewohnheit wird man sich in LISP trennen müssen, LISP akzeptiert diese Notation nicht. Bei der Eingabe von LISP-Ausdrücken muss immer als erstes die auszuführende Operation in der Klammer stehen, und danach können (je nach Sachlage) ein bis beliebig viele Operanden folgen, d.h. die Elemente, mit denen die Operation ausgeführt wird.

Auch wenn es vielleicht zunächst etwas schwerfallen wird, sich an diese Schreibweise (man nennt die Präfix-Notation) zu gewöhnen, so wird sich doch bald zeigen, dass dadurch die Eingabe wesentlich effektiver wird als bei der gewohnten mathematischen Eingabeweise (diese nennt man Infix-Notation). Wenn man z.B. nicht nur zwei, sondern mehrere Zahlen addieren möchte, so muss man dies in mathematischer Schreibweise so ausdrücken: 7 + -11 + 9 + -2 + 8 + 1 = 12. Die mathematische Schreibweise nennt man übrigens auch Infix-Notation.

Die Präfix-Notation verkürzt die Eingabe deutlich:
(+ 7 -11 9 -2 8 1) => 12
Es gibt auch noch eine Postfix-Notation, bei der die auszuführende Operation als letztes Element aufegführt wird. Die Postfix-Notation wird z.B. in der Pogrammiersprache FORTH oder bei manchen wissenschaftlichen Taschenrechnern verwendet. Sie ist genauso effektiv wie die Präfix-Notation.

Zurück zu AutoLISP und der Präfix-Notation: Üben Sie ein wenig die Grundrechenarten und beobachten Sie, wie LISP die eingegebenen Ausdrücke interpretiert. Fangen wir mit der Addition an:
(+ 1 1)            =>  2
; Eins und eins ist zwei, wer hätte das gedacht?

(+ 10 -10)         =>  0
; Auch das war zu erwarten

(+ 1 1 1 1 1)      =>  5
; siehe Effektivität oben

(+ 1)              =>  1
; ergibt keine Fehlermeldung

(+)                =>  0
; ebenfalls keine Fehlermeldung

(+ 1.5 2)          =>  3.5
; wir nehmen das erstmal zu Kenntnis
Aus diesen Versuchen schliessen wir, dass die Funktion (+) mit beliebig vielen Argumenten aufgerufen werden kann. Um das am Rande gleich zu klären: Eine Funktion ist in LISP die auszuführende Rechen- oder sonstige Operation, und als Argumente bezeichnet man alle anderen Elemente in der Klammer, die dem Funktionsaufruf mitgegeben werden.

Wenden wir uns nun der Funktion (-), der Subtraktion, zu:
(- 10 1)             =>   9
; das sieht doch ganz vernünftig aus

(- 5 9)              =>  -4
; wir können auch rote Zahlen schreiben

(- 1373.40 1409.20)  => -35.80
; Einnahmen minus Ausgaben, wie gewohnt...

(- 10 1 1 1 1 1)     =>   5
; Es werden also alle weiteren Argumente vom ersten abgezogen

(- 7)                =>  -7
; wenn nur ein Argument vorliegt, wird es von 0 abgezogen

(-)                  =>  0
; auch das ist zulässig, aber nicht sehr sinnvoll
Bei der Multiplikation (*) erleben wir auch keine Überraschungen:
(* 3 4)              =>   12
; alles klar...

(* 1 1)              =>    1
; Das kleinste Einmaleins

(* 10 11 12)         => 1320
; Schon etwas grösser

(* 5)                =>    5
; Liegt nur ein Argument vor, wird mit 1 multipliziert

(*)                  =>    1
; ergibt immer 1
Beim Dividieren wird sicher alles genauso sein:
(/ 100 5)            =>   20
; weiß jedes Kind

(/ 100 5 2)          =>   10
; haben wir uns gedacht

(/ 5 6)              =>    0
; aber das macht doch etwas stutzig!

(/ 10 3)             =>    3
; Auch das befriedigt nicht so ganz!
Wir sehen, dass bei dividieren doch etwas merkwürdige Ergebnisse zum Vorschein kommen. Wie es aussieht, ist LISP hier nicht aus dem Grundschulstadium herausgekommen: 10 durch 3 ist 3 Rest 1, wobei der Rest unter den Teppich gekehrt wird. Und 5 durch 6 geht gar nicht rein, Rest 5 wieder unter den Teppich.

So ist es: Die Division wird als Ganzzahl-Operation durchgeführt, wenn alle Argumente Ganzzahlen sind. Im Gegensatz zu den Ganzzahlen (auf Computerdeutsch Integers oder Integerzahlen) bezeichnet man Zahlen mit Dezimaltrennzeichen und Dezimalstellen als Reelle Zahlen oder - auf Computerdeutsch - Reals oder Realzahlen.

Also noch ein Paar Versuche:
(/ 5.0 6.0)   =>  0.8333
; das lässt hoffen

(/ 10.0 3)    =>  3.3333
; es lassen sich also auch Feinheiten erfassen

(/ 10 3.0)    =>  3.3333
; geht auch

(/ 3)         =>  3
; Nur ein Argument: wird durch 1 geteilt

(/)           =>  0
; gar kein Argument ergibt immer 0
Nachdem der Unterschied zwischen Integer- und Realzahlen klar ist, dürfte auch die Division keine Schwierigkeiten mehr machen, wenn wir nur immer schön an den kleinen Unterschied denken...


Übungsaufgaben

  1. Wie gibt man eigentlich negative Zahlen ein? Ist das hier zulässig: (- -3) ?

  2. Berechnen Sie in der Kommandozeile:
    1/7
    1/(13*17)
    14393 zum Quadrat
    (-4 + -6)*(-1 + -7)


  3. 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 Zeile (horizontal!) ein bestimmtes Quadrat liegt? (Für ganz Spitzfindige: Natürlich laufen die Zeilen immer von Links nach Rechts!)

  4. Welche der folgenden Eingaben verursachen eine Fehlermeldung?
    (+ 3 + 4 + 5)
    (+3 4)
    (+ 5 -3)
    (+ 5 - 3)

  5. Wir wissen, dass (/ 7 2) nicht 3,5 ergibt, sondern 3. Aber warum erzeugt (/ 7,0 2,0) eine Fehlermeldung?

  6. Wie nennt man die Schreibweise, in der LISP-Ausdrücke eingegeben werden?

Lösungen