Hi Autocart,
ein paar Sachen sind dir noch nicht klar - aber mach dir nix draus, das ist den wenigsten hier klar:
Es gibt keine Variablen in diesem Sinne - in Lisp gibt es nur Symbole. Diesen Symbolen kann man entweder einen Wert zuweisen oder auch nicht, dann ist das Symbol eben an nil gebunden. Tipp doch einfach mal auf der Acad-Befehlszeile das hier ein:
!blödes-symbol-das-es-bestimmt-nicht-gibt
Und was meldet dir Lisp? => nil, aber niemals etwas wie "undeklarierte Variable". So etwas gibt es in anderen Sprachen, aber nie in Lisp.
Es gibt also auch dieses Symbol, und es ist an nil gebunden. Löschen kann man Symbole nicht - wozu auch?
Man kann in Lisp wirklich ganze Programme schreiben, die nur aus Symbolen bestehen, und alle diese Symbole sind und bleiben an nil gebunden, oder aber an andere Symbole, die an nil gebunden sind. Wenn man aber Wertbindungen will, kommt man an set nicht vorbei - und setq ist nur eine nette Schreibweise für set, damit man sich das Eintippen eines Hochkommas sparen kann (wofür man allerding ein 'q' mehr tippen muss). Ach ja, und (defun ...) samt Erscheinungsformen erzeugt auch eine längerfristige Bindung, foreach und lambda eine eher vorübergehende.
Zitat:
und wenn eine globale Variable automatisch auch ohne setq erzeugt wird...
Ich dehne einfach mal setq auf set aus: Dieser Satz ist so nicht haltbar. Natürlich, fast jedes (defun...) erzeugt eine globale Variable, aber darum geht es dir doch nicht, oder?
Was du meinst, ist wohl eher das, was viele unter "Sicherheitsaspekte" an AutoLisp kritisieren: Man ruft eine (unbekannte, ungeprüfte) Subfunktion auf, und diese kann a) globale Variablen erzeugen, die man gar nicht wollte, und b) einem sogar noch die lokalen Variablen in der aufrufenden Funktion versauen. Aber diese 'bösen' Funktionen benutzen setq!
Lisp - vor allem das sehr vereinfachte AutoLisp - entspricht in keinster Weise den heutigen Sicherheitsanforderungen für eine Programmiersprache. Diese Sprache hat fast 50 Jahre auf dem Buckel, damals ging es darum, auf einem Rechner mit 8 KB Speicher Programme laufen zu lassen, die mit ein paar Zeilen Code Berge versetzt haben. Aber der, der das Programm gestartet hat, musste den ganzen Code kennen und beherrschen.
Fazit: Es gibt wohl nach wie vor keine Sprache, mit der man mit so wenig Aufwand so viel erreichen kann - aber es gibt auch kaum eine, wo man so viel Murks machen kann. Und es gibt keinen Compiler, der irgendwas anmeckert;-)
Gruß, Axel
------------------
Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP