Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Speichern von Systemvarablen in Lisp-Programmen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Speichern von Systemvarablen in Lisp-Programmen (636 mal gelesen)
Bernhard GSD
Mitglied



Sehen Sie sich das Profil von Bernhard GSD an!   Senden Sie eine Private Message an Bernhard GSD  Schreiben Sie einen Gästebucheintrag für Bernhard GSD

Beiträge: 482
Registriert: 29.08.2002

AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)

erstellt am: 22. Jun. 2004 14:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Wer weiss warum Systemvariablen nur dann von Lisp wieder zurückgesetzt werden können, wenn die Lisp-Variable nur lokal ist?

------------------
Gruß aus Wien
Bernhard

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 22. Jun. 2004 15:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernhard GSD 10 Unities + Antwort hilfreich

Das eigentliche Thema ist meiner Meinung nach die Gültigkeit(-dauer) von Variablen.

1. beispiel
(defun xxx (/ old_osmode )
  (setq old_osmode (getvar "OSMODE"))
......

  (setvar "OSMODE" old_osmode)
)
hier ist die lispvariable nicht lokal, sondern nur in der funktion xxx gültig, da das rücksetzen der systemvariablen jedoch in der gleichen funktion passiert, ist das kein problem

2. beispiel

(defun masterprogramm ( / old_osmode )
  (speicherevariable)
....
  (rücksetztevariable)
)
(defun speicherevariable (/)
  (setq old_osmode (getvar "osmode"))
)
(defun rücksetztevariable (/)
  (setvar "OSMODE" old_osmode)
)

auch hier ist die lisp vaiable nicht lokal , funktioniert aber doch, da es im master - programm definiert wird, aber für alle unter-programme gilt.


3. beispiel

(defun masterprogramm ( / old_osmode )
  (speicherevariable)
....
  (rücksetztevariable)
)
(defun speicherevariable (/ old_osmode )
  (setq old_osmode (getvar "osmode"))
)
(defun rücksetztevariable (/ old_osmode )
  (setvar "OSMODE" old_osmode)
)
dieses beispiel funktioniert NICHT, da auch in den unterprogrammen die variable deklariert wird (diese doppeldeklaration im unterprogramm beinflusst aber NICHT den Wert/Zusatnd der Variable im Hauptprogramm)

also es kommt nur drauf an , wo bzw wie variablen deklariert werden, damit sie ihren wert auch dann noch haben wenn man ihn braucht.

------------------

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bernhard GSD
Mitglied



Sehen Sie sich das Profil von Bernhard GSD an!   Senden Sie eine Private Message an Bernhard GSD  Schreiben Sie einen Gästebucheintrag für Bernhard GSD

Beiträge: 482
Registriert: 29.08.2002

AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)

erstellt am: 22. Jun. 2004 16:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Auch in der Funktion xxx ist die Variable lokal gültig.
Aber wieso ist i, Beispiel 1 überhaupt eine lokal, nur in der Funktion gültige Variable erforderlich. Am Wert der Variable ändert doch die Tatsache, dass sie lokal ist nichts. SETVAR nimmt solche Rückstellungen trotzdem nur von lokalen Variablen an. Welches System steckt da dahinter?

------------------
Gruß aus Wien
Bernhard

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 22. Jun. 2004 16:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernhard GSD 10 Unities + Antwort hilfreich

der funktion setvar ist es sch...egal ob die variable in der ganzen zeichnung oder nur in der funktion gilt. zum zeitpunkt des befehls setvar muss sie einen gültigen wert haben.

------------------

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bernhard GSD
Mitglied



Sehen Sie sich das Profil von Bernhard GSD an!   Senden Sie eine Private Message an Bernhard GSD  Schreiben Sie einen Gästebucheintrag für Bernhard GSD

Beiträge: 482
Registriert: 29.08.2002

AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)

erstellt am: 22. Jun. 2004 16:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

So gehts aber ohne lokale Variablen...

(defun xxx ()
  (setq old_osmode (getvar "OSMODE"))
  (SETQ osmode_old old_osmode)
  (Setq A 0)
  (SETVAR "osmode" A)
  (princ (GETVAR "OSMODE") )
  (setvar "OSMODE" osmode_old)
)

------------------
Gruß aus Wien
Bernhard

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 22. Jun. 2004 16:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Zitat:
Original erstellt von Bernhard GSD:
So gehts aber ohne lokale Variablen...

  (SETQ osmode_old old_osmode)


Wozu sollte das nötig sein? Jetzt hast Du zwei globale Variablen statt einer, und zum Zurücksetzen verwendest Du ohnehin nur die eine davon.

Und auch bei den anderen Beiträgen habe ich hier und da den Eindruck, dass da etwas durcheinander geraten ist.

@ fuchsi:

Zitat:

(defun xxx (/ old_osmode )
  (setq old_osmode (getvar "OSMODE"))
  ...


Damit ist die Variable old_osmode in der Funktion xxx LOKAL! In Deinem zweiten Beispiel ist die Variable immer noch als lokal deklariert - dass sie in den Funktionen, die aus xxx aufgerufen werden, dennoch sichtbar ist, liegt an alten Unzulänglichkeiten des AutoLISP Interpreters (nicht "lexikalisch").

Autodesk hatte vor ein paar Jahren mal einigermaßen offiziell die Weiterentwicklung von VisualLISP hin zum CommonLISP Standard versprochen, aber das ist nur eines von vielen gebrochenen Versprechen ...

Um mehr über die Bindung von Variablen zu erfahren, empfiehlt sich beispielsweise Google mit den Suchbegriffen "LISP interpreter lexical scope" zu füttern.

Tom Berger

------------------


Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz