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










Wir haben bei der Verwendung von Rechenfunktion bisher ausschliesslich mit Zahlenwerten gearbeitet, die wir direkt eingegeben haben. Es gab allerdings eine Ausnahme: Die Zahl pi haben wir verwendet, in dem wir statt des tatsächlichen Zahlenwertes einfach den Namen pi eingesetzt haben. Dieses Prinzip können wir auch mit anderen Namen und anderen Werten anwenden. Dazu benutzen wir die Funktion (setq ...).
(setq var1 5)  =>  5
;var1 ist der Name der Variablen, 5 ist ihr Wert

(setq var2 3)  =>  3
;(setq) gibt immer den gesetzten Wert zurück
Wir haben jetzt mit var1 und var2 (diesen Namen sind frei gewählt) zwei Variablen angelegt, auf die wir immer wieder zurückgreifen können. Wir können z.B. damit rechnen:
(+ var1 var2)  =>  8
(- var1 var2)  =>  2
Den Wert von Variablen können wir jederzeit wieder ändern:
(setq var2(1+ var2))  => 4
Die Funktion (1+ ...) wurde bisher nicht erläutert. Sie erhöht einen Zahlenwert um 1, ist aber schneller als (+ zahl 1). Entsprechend arbeitet auch (1- ...).
(+ var1 var2)  => 9
;entspricht (+ 5 4)
Beachten Sie, dass die Änderung eines Variablenwertes immer wieder mit (setq ...) zugewiesen werden muss. Der Ausdruck (1+ var1) gibt zwar 6 zurück, var1 behält aber immer noch den Wert 5. Erst die Zuweisung
(setq var1(1+ var1))  => 6
setzt den Variablenwert neu. Wir geben nun nacheinander folgende Zeilen ein:
(setq var1 3)
(setq var2(1+ var1))
(setq var3(+ var1 var2))
(setq var4(1- var3))
Was ist das Ergebnis des Ausdrucks (+ var1 var2 var3 var4)?

Welche Variablennamen darf man verwenden? Das ist keine leicht zu beantortende Frage. Das AutoLISP-Handbuch sagt dazu: Sie können die Namen aus beliebigen Zeichen ausser Punkt, Leerstelle, runden Klammern, Anführungszeichen, Semikolon und Hochkomma zusammensetzen. Und dann gibt es noch einen sehr wichtigen Unterschied zwischen älteren und den neuesten AutoCAD-Versionen: Bis AutoCAD 14 warnt das Handbuch davor, bereits in Lisp vorhandenen Namen mit (setq) einen anderen Wert zuzuweisen. z.B. ist die Zuweisung (setq pi 7) technisch völlig ok, Sie werden allerdings danach an manchen Berechnungen nicht mehr die volle Freude haben. Es kann Sie auch niemand daran hindern, folgendes einzugeben:
(setq setq 1)      =>   1
Danach werden Sie aber feststellen, dass (setq) einfach nicht mehr funktioniert. Es wird mit an Sicherheit grenzender Wahrscheinlichkeit kein einziges LISP-Programm mehr laufen. Der einzige Weg aus dieser misslichen Lage ist das Laden einer AutoCAD-Zeichnung (der selben oder einer anderen), da durch die Befehle "Neu" und "Öffnen" der AutoLISP-Speicher wieder zu- rückgesetzt wird. Alle AutoLISP-Funktionen sind wieder im Urzustand, allerdings sind auch alle mit (setq) gesetzten Variablen weg.

Ab AutoCAD 2000 sieht die Sache anders aus: Ein Überschreiben der Namen von Variablen und Funktionen ist zwar auf der Kommandozeile immer noch möglich, aber aus Gründen, deren Behandlung hier zu fortgeschritten wäre, funktionieren die eingebauten Funktionen trotzdem noch.

Man sollte also bei der Vergabe von Variablennamen mit Bedacht vorgehen. Wichtig ist auch, dass die Namen aussagefähig sind. Dies spielt zwar im Moment bei unseren Kommandozeilen-Versuchen keine Rolle, wenn Sie jedoch später ganze Programme schreiben, sollten Sie sehr darauf achten. Wenn auch in den folgenden beiden Programmfragmenten einige Ihnen noch völlig unbekannte Funktionen verwendet werden, können Sie doch sicher zustimmen, dass die zweite Variante wesentlich leichter zu lesen ist als die erste:
; zunächst die schwer lesbare Variante
...
(setq og(+ bk bh))
(setq p
  (getpoint "\nPunkt wählen: ")
)
(if
  (>(cadr p)og)
  (princ"\nUngültig!")
)
...

; und hier die bessere!
...
(setq obergrenze(+ blattkante blatthoehe))
(setq klickpunkt
  (getpoint "\nPunkt wählen: ")
)
(if
  (>(cadr klickpunkt)obergrenze)
  (princ"\nUngültig!")
)
...
Lassen Sie sich auch nicht von Hinweisen in älteren AutoLISP-Handbüchern beeindrucken, dass Variablennamen nicht länger als 6 Zeichen sein sollten. Dieser Hinweis stammt noch aus der Zeit, als AutoCAD auf XT-Rechnern mit 512 KB Arbeitsspeicher und einer Taktfrequenz von 6 Mhz lief. Es ist richtig, dass Namen mit mehr als 6 Zeichen den Pogrammablauf (theoretisch) etwas verlangsamen. Dies findet allerdings in einem nicht messbaren Bereich statt. Der andere Fall ist der Folgende: Sie haben ein Programm geschrieben und stellen nach ein paar Monaten einen kleinen Fehler fest. Nun sitzen Sie mit roten Augen vorm Bildschirm und versuchen nachzuvollziehen, was Sie sich damals bei ihren Hieroglyphen-Kürzeln wohl gedacht haben. Es kann sein, dass Sie das Programm schneller neugeschrieben haben, als es dauern würde, sich wieder hineinzuversetzen. Und was spielt da die halbe tausendstel Sekunde eine Rolle, die das Programm durch die Unlesbarkeit schneller geworden ist?

Wenn Sie bei Ihren ersten Versuchen vermeiden wollen, dass Sie die Namen von LISP-Funktionen usw. bei der Vergabe von Variablennamen überschreiben, dann geben Sie Ihren Variablen z.B. Name in deutsch (die LISP-Namen sind alle englisch) oder beginnen Sie alle Namen mit einem Tiefstrich oder lassen Sie sich etwas anderes einfallen.


Übungsaufgaben

  1. Stellen Sie sich vor, die beiden Variablen zahl1 und zahl2 haben Werte, die Sie gar nicht kennen. Ihre Aufgabe ist es jetzt, zahl1 durch zahl2 zu teilen. Richtig!, Sie wissen nicht, ob es Ganz- oder Realzahlen sind. Denken Sie mal nach und überlegen sich eine Lösung (mit Ihrem bisherigen Wissensstand), mit der Sie die drohenden Probleme umgehen können und auf jeden Fall ein Ergebnis mit Kommastellen bekommen.

  2. Welche der nachfolgenden Ausdrücke sind in AutoLisp illegal?
    (setq variable 0)
    (setq *anderevariable* 1)
    (setq noch-eine-variable 2)
    (setq == 3)
    (setq , 4)
    (setq eine.variable 5)

  3. Welche der folgenden Aussagen sind richtig?
    • Bis AutoCAD 14 kann es passieren, dass man die eingebauten Funktionen überschreibt

    • Es kann in allen AutoCAD-Versionen passieren, dass man die eingebauten Funktionen überschreibt, ab AutoCAD 2000 ist dies aber nicht mehr so dramatisch

    • (setq ...) bindet einen Wert an eine Funktion

    • (setq ...) bindet einen Wert an eine Variable

  4. Überprüfen Sie folgende (etwas diffizile) Betrachtung: Wenn Sie den Ausdruck (/ var1 var2 1.0) ausführen lassen und die beiden Variablen Ganzzahlen enthalten (sagen wir mal 3 und 4), dann wird nach der Links->Rechts-Regel zuerst 3/4 berechnet, was (als Ganzzahldivision) 0 ergibt. Erst dann wird durch 1.0 geteilt, und das Ergebnis wird zu einer Realzahl umgewandelt, also 0.0