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!

Funktionen für komfortables Arbeiten mit Zeichenketten String-Tango
Noch mehr Funktionen für komfortableres Arbeiten mit Zeichenketten Kettenhunde
strtok zerlegt Zeichenketten anhand eines Trennzeichens Tock-Tock
Arbeiten mit Datum und Zeit in AutoLisp Zeitlos...
Dotted pairs - wie man den Programmabbruch verhindert Gepunktet?
Neue Funktionen für die Listenbearbeitung Strukturtapete
Weitere neue Funktionen für die Listenbearbeitung Listen to me!
Lambda expressions - dasSalz in der Suppe Lambada
Lambda expressions anhand eines Praxisbeispiels Unter der Erde
Where und whereever erleichtern den Umgang mit Listen Quo vadis?
Rekursion - Funktionen, die sich selbst aufrufen Katzenschwanz
Ein äusserst wichtiger Prototyp für Funktionen Nix passiert
Wo das lineare mapcar am Ende ist Tiefer rein!
Über Effekte und Neben(Seiten-)Effekte von Funktionen Seitensprünge
Die Namensräume (Sichtbarkeit) von Variablen Raumwunder
Let dient zur Schaffung kleinerer Namensräume Lass mal...
Sukzessive Verarbeitung von Listenresten mit mapcdr Der Bruder
Was in AutoLisp einfach nicht machbar ist (Teil I) Beschränkt
Was in AutoLisp einfach nicht machbar ist (Teil II) Limited Edition
Nicht mit Effekten arbeiten, sondern direkter Daten-Änderung Destruktiv
Sequenzielles vs. paralleles Abarbeiten von Argumenten Parallelwelten
Über den Umgang mit Funktionsschablonen Erwachet!
Ein Praxiskapitel über Auswahlsätze, Attribute, wcmatch und mehr Durch die Brust
Die Farben des AutoCAD Color Index und ihre RGB-Werte Alles so schön
Hier laufen die Fäden zusammen: Viele Konzepte vereint Lapsus Lispuli
Ein Spiel als Beispiel für lernfähige Funktionen Zug um Zug
Errorhandling in AutoLisp - Teil 1 Alles valsch!
Errorhandling in AutoLisp - Teil 2 Und foll Feler!


Zum Einsteiger-Tutorial

Zu den ActiveX-Seiten

Meine Private HP mit Fotos, Gedichten, Musik und Postkartenversand

Mein Online-Lexikon der Fotografie

Mein völlig abgedrehtes Reisebüro










Bitte nicht erschrecken: Ich will hier nichts kaputtmachen, und eine Anleitung zu Virenbasteln in AutoLisp gibt's hier sicherlich nicht! Mit 'destruktiv' bezeichnet man einfach Funktionen, die Daten im Speicher verändern - also Funktionen mit Nebeneffekt. Es geht hier um eine Anleitung, wie man sich zu vorhandenen Funktionen noch destruktive Parallelversionen schaffen kann. Diese sind dann zwar nicht sonderlich für Verkettungen geeignet, können einem aber einfach eine Menge Tipparbeit abnehmen.

Anfänger vergessen ja so ab und zu, dass Funktionen wie (append ...) reine Effektfunktionen sind (ach ja, wer das Kapitel über Effekte und Seiteneffekte noch nicht gelesen hat: Das sollte jetzt erstmal nachgeholt werden!). (append liste1 liste2) ist nur dann sinnvoll und nützlich, wenn die Rückgabe aufgefangen und weiterverarbeitet wird. Meist rettet sich der Anfänger damit, dass er das Ergebnis mit (setq ...) einer Variablen zuweist.

Manchmal ist ja eine solche Zuweisung durchaus sinnvoll. Schliesslich muss ja nicht in einer Funktion, die 23 Mal die Wurzel aus pi Viertel braucht, auch 23 Mal berechnet werden, wieviel das denn nun ist. Also fährt man besser, wenn man einmal (setq wupivi(sqrt(/ pi 4))) berechnet und dann nur noch die Variable benutzt. Wenn man in einer ähnlichen Situation nun zwei Listen zusammenfügen und das Ganze dann speichern will, muss man
(setq liste(append liste andere-liste))
                  
hinschreiben. Und die Zuweisung ist das, was Anfänger eben mal vergessen. Wie wäre es denn, wenn wir die Sache andersherum angehen: Eine Funktion, die das in einem Rutsch erledigt? Damit wir sie von dem normalen append unterscheiden können, nenne ich sie append!:
(append! liste andere-liste)
                  
Leider geht das nicht ganz so mit unserem Destruktiv-append! Da das Argument liste ja evaluiert wird, kann unser append! die Zuweisung nicht vornehmen - das Symbol liste kommt dort nicht an. Aber die folgende Version funktioniert:
(append! 'liste andere-liste)
                  
In der Funktion kann mit (eval ...) die erste Liste angesprochen werden, die zweite wird mit append verbunden, und das Ganze wird an das Symbol liste gebunden. So sieht die Funktionsdefinition aus:
(defun append!(symbol1 liste2 / )
  (set symbol1(append(eval symbol1)liste2))
)