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










Eine weitere Möglichkeit, dass eine Verzweigung komplexer wird, kann aber auch sein, dass nicht nur zwischen 'wahr' und 'falsch' unterschieden werden soll, sonder zwischen mehreren Möglichkeiten. In diesem Fall ist die Funktion (if ...) nicht mehr geeignet. Für Mehrfachauswahlen stellt uns Lisp die Funktion (cond ...) zur Verfügung. Diese Funktion hat eine vielleicht etwas gewöhnungsbedürftige Syntax, wodurch sie wohl von den Argumenten her die komplizierteste aller Funktionen in AutoLisp ist:
(cond
  (test1 ausdr1-1 ausdr1-2 ...)
  (test2 ausdr2-1 ausdr2-2 ...)
  (test3 ausdr3-1 ausdr3-2 ...)
  .
  .
)
                  
Jedes Argument für (cond) ist eine Liste. Diese enthält als erstes Unterargument einen Test, danach beliebig viele Ausdrücke, die im WENN-Fall des Testausdrucks abgearbeitet werden. Es gibt im Gegensatz zu (if) keine SONST-Anweisungen.

Wenn einer der Testausdrücke sich als wahr erwiesen hat, werden die dazugehörenden WENN-Ausdrücke evaluiert und anschliessend die ganze (cond)-Anweisung beendet. Es kann also niemals mehr als ein Test wahr werden. Allerdings kann das Gegenteil der Fall werden: Keiner der Testausdrücke wird wahr. In der Praxis findet man deshalb häufig einen letzten Testausdruck, der immer wahr wird:
(cond
  ((= farbe 0) "VONBLOCK")
  ((= farbe 1) "ROT")
  ((= farbe 2) "GELB")
  ((= farbe 3) "CYAN")
  ((= farbe 4) "GRÜN")
  ((= farbe 5) "MAGENTA")
  ((= farbe 6) "BLAU")
  ((= farbe 7) "WEISS")
  ((< 7 farbe 256)farbe)
  ((= farbe 256) "VONLAYER")
  ('T "Falsche Farbnummer")
)
                  
Die Rückgabe von (cond ...) ist - wie bei (if ...) immer der Wert des letzten evaluierten Ausdrucks. In unserem Beispiel ist das immer eine der Zeichenketten, ausser wenn die Farbe zwischen 8 und 255 liegt, dann wird die Variable farbe evaluiert und der Wert zurückgegeben.

Lassen Sie uns das letzte Beispiel unter die Lupe nehmen: Es wird der Inhalt der Variablen farbe untersucht. Die Fälle, in denen der Inhalt 0 - 7 oder 256 beträgt, sind einzeln geregelt. Liegt die Farbnummer zwischen 8 und 255, wird die Farbnummer unverändert zurückgegeben. Alle anderen Fälle sind durch den Testausdruck 'T abgedeckt. Dieser ist immer wahr, daher wird diese Verzweigung immer ausgeführt, wenn keiner der vorhergehenden Tests wahr wurde.

Natürlich können Sie das 'T durch irgendetwas anderes ersetzen, das immer wahr wird, z.B. (/= 3 4), (not nil) oder was Ihnen sonst noch einfällt. Die in vielen Programmen anzutreffende Praxis (cond ... (T ...)) ist, wie bereits besprochen, davon abhängig, dass das Symbol T nicht versehentlich umdefiniert wurde (betrifft nur AutoLisp-Versionen bis 14). Auch ein ungebundenes Symbol evaluiert immer zu T, daher ist es eine gute Idee, wenn man an dieser Stelle das Symbol 'default verwendet, wie es der eine oder andere sicherlich aus anderen Sprachen kennen wird.

Vielleicht sind Sie irritiert, dass (cond) plötzlich das akzeptiert, was im vorigen Kapitel bei unseren ersten Versuchen mit (if) zu einem Fehler geführt hat, nämlich die Doppelklammern. Der Unterschied ist, dass (if) Ausdrücke als Argumente erwartet, (cond) jedoch möchte Listen mit Ausdrücken. Da auch (cond) seine Argumente allesamt automatisch quotiert, ergeben sich hier also quotierte Listen, die im weiteren Verlauf gar nicht als Ganzes evaluiert werden, da ihre Elemente einzeln und nacheinander ausgeführt werden.

Das Wichtigste aus den letzten drei Kapiteln noch einmal in Kürze zusammengefasst:
  • AutoLISP bietet keine Möglichkeit, echte Konstanten zu definieren
  • Die Funktion (if) ermöglicht es einem Programm, aufgrund eines Testergebnisses zu verzweigen
  • Wenn der WENN- oder SONST-Zweig einer (if)-Anweisung aus mehreren Ausdrücken bestehen soll, müssen diese mit (progn) zu einem Ausdruck zusammengefasst werden
  • Testfunktionen in AutoLISP geben T oder nil zurück
  • Jeder Ausdruck kann als Testausdruck verwendet werden, wenn er in der Lage ist, je nach Sachlage nil oder etwas anderes zurückzugeben
  • Mehrere Testfunktionen können durch (and), (or) und (not) zu einem neuen Testausdruck kombiniert werden
  • Wenn zwischen mehr als zwei Möglichkeiten entschieden werden soll, muss (cond) anstelle von (if) verwendet werden
  • Während (if) WENN- und SONST-Ausdrücke als Argumente erwartet, müssen wir an (cond) Listen mit Tests sowie WENN-Ausdrücken übergeben.
  • Die Testausdrücke in (cond) sind unabhängig voneinander. Sobald sich ein Testausdruck als wahr erwiesen hat, werden die dazugehörenden WENN-Ausdrücke nacheinander evaluiert und dann die (cond)-Anweisung beendet.
  • Als letzten Testausdruck setzt man bei (cond) oft einen Ausdruck ein, der immer wahr wird. Damit wird verhindert, dass irgendwelche Möglichkeiten durch das Auswahlsieb rutschen.
  • Bei jedem Gebrauch von (if) sollte man überlegen, ob nicht der Testausdruck alleine ausreicht