Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  PTC Creo Elements/Programmierung
  LISP: Variablenname im Code erzeugen

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 Creo
  
Windows Server 2025 - Was ist neu im Microsoft Server-Betriebssystem, eine Pressemitteilung
Autor Thema:  LISP: Variablenname im Code erzeugen (2129 mal gelesen)
holt
Mitglied
Systembetreuer CAD


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

Beiträge: 720
Registriert: 07.08.2003

Lenovo ThinkStation P360
Core i7-12700@2.10 GHz, 32GB
NVIDIA RTX A2000 12 GB
Creo Elements/Direct Modeling 20.5
Creo Elements/Direct Drafting 20.5
Creo Elements/Direct ModelManager 20.5

erstellt am: 20. Apr. 2011 13:43    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

Hallo,

ich habe in einem Dialog mehrere Variable die mit laufenden Nummern versehen sind.
Diesen Variablen werden im Prinzip immer mit dem selben Code Werte zugewiesen oder abgefragt.

Code:

:variables
'(
    (Var-1-test :value-type :length)
    (Var-2-test :value-type :length)
    (Var-3-test :value-type :length)
  )


Um Codezeilen zu sparen dachte ich mir, ich könnte diese Variablen mittels
Code:
(setf var (read-from-string (format nil "Var-~a-test" counter)))

im Code erzeugen.
Ich bekomme da zwar ein Symbol, aber wie bekomme ich den Wert der entsprechenden Dialogvariable bzw. wie kann ich dieser einen Wert zuweisen?

Funktioniert das auf diese Art und Weise überhaupt oder liege ich komplett falsch?

------------------
Gruß aus dem Salzkammergut

Thomas

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

clausb
Ehrenmitglied V.I.P. h.c.



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

Beiträge: 2914
Registriert: 20.12.2000

Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.

erstellt am: 20. Apr. 2011 20:18    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 holt 10 Unities + Antwort hilfreich

Hört sich eher fischig an. Hinweise:

------------------
CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/

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

holt
Mitglied
Systembetreuer CAD


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

Beiträge: 720
Registriert: 07.08.2003

Lenovo ThinkStation P360
Core i7-12700@2.10 GHz, 32GB
NVIDIA RTX A2000 12 GB
Creo Elements/Direct Modeling 20.5
Creo Elements/Direct Drafting 20.5
Creo Elements/Direct ModelManager 20.5

erstellt am: 21. Apr. 2011 07:32    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

Hallo claus,

Zitat:
Original erstellt von clausb:
Zuweisen eines Wertes an das neu erzeugte Symbol: (setf (symbol-value var) 42)

funktioniert mit globalen Variablen (mit defvar erzeugt), prima, aber nicht mit Dialogvariablen oder mit lokalen Variablen.

Zitat:
Auszug aus Lispworks CLHS:
Notes:
symbol-value can be used to get the value of a constant variable. symbol-value cannot access the value of a lexical variable.

Gensym ist auch nicht das richtige. Ich will ja eigentlich kein neues Symbol erzeugen, sondern im Code nur den Namen der verwendeten Variable dynamisch erzeugen um der bereits existierenden Variable einen Wert zuzuweisen oder diesen zu bekommen.

------------------
Gruß aus dem Salzkammergut

Thomas

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

clausb
Ehrenmitglied V.I.P. h.c.



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

Beiträge: 2914
Registriert: 20.12.2000

Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.

erstellt am: 21. Apr. 2011 13:28    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 holt 10 Unities + Antwort hilfreich

Auch mit lokalen Variablen geht das:

Code:

(defun foo()
  (let ((sym (read-from-string "mysym")))
    (setf (symbol-value sym) 42)
    (print (symbol-value sym))))

Aber wie auch immer - das war nur als Inspiration gedacht, in der Hoffnung, dass es Dich auf eine Idee bringt. Eine echte Lösung kann ich nicht anbieten, weil ich die beabsichtigte Anwendung vermutlich nicht wirklich verstanden habe.

------------------
CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/

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

holt
Mitglied
Systembetreuer CAD


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

Beiträge: 720
Registriert: 07.08.2003

Lenovo ThinkStation P360
Core i7-12700@2.10 GHz, 32GB
NVIDIA RTX A2000 12 GB
Creo Elements/Direct Modeling 20.5
Creo Elements/Direct Drafting 20.5
Creo Elements/Direct ModelManager 20.5

erstellt am: 22. Apr. 2011 11:36    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

Hallo,

mit lokalen Variablen scheints wirklich zu funktionieren, aber auf Dialogvariablen kann ich auf diese Weise innerhalb der local-functions nicht zugreifen.

Vielleicht nochmal zur Erklärung:
Ich baue einen Dialog, mit einigen Variablen, die durchnummeriert werden:

Code:
:variables
'(
    (Var-1 :value-type :length)
    (Var-2 :value-type :length)
    (Var-3 :value-type :length)
...
    (Var-16 :value-type :length)
  )

In den local-functions werden die Werte dieser Variablen abgefragt und ev. mit neuen Werten gefüttert.
Damit ich den gleichen Code nicht für jede Variable extra schreiben muss, möchte ich in einer dotimes Schleife die Variablennamen erzeugen und dann damit arbeiten.
statt

Code:

(tu-was ()
  (tu-irgendwas-mit var-1)
  (tu-irgendwas-mit var-2)
  (tu-irgendwas-mit var-3)
...
  (tu-irgendwas-mit var-16))


möchte ich:
Code:

(tu-was ()
  (dotimes (counter 16)
    (setf var (read-from-string (format nil "Var-~a" counter)))
    (tu-irgendwas-mit var)))

Ich habe mir auch schon überlegt, ob ich eine Liste oder ein Array erzeugen soll, wohin die Werte der Dialogvariablen "kopiert" werden. Das hat aber den Nachteil, dass ich eine eigene Funktion bauen muss, die die Werte von den Dialogvariablen in die Liste oder das Array kopiert und bei Änderungen wieder zurückkopiert.

------------------
Gruß aus dem Salzkammergut

Thomas

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

clausb
Ehrenmitglied V.I.P. h.c.



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

Beiträge: 2914
Registriert: 20.12.2000

Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.

erstellt am: 26. Apr. 2011 18:45    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 holt 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von holt:
mit lokalen Variablen scheints wirklich zu funktionieren, aber auf Dialogvariablen kann ich auf diese Weise innerhalb der local-functions nicht zugreifen.

Kann gut sein. "Dialogvariablen" werden in sd-defdialog ganz speziell behandelt.

Eventuell helfen Dir die Dialoggenerator-Funktionen sd-get-variable-status und sd-set-variable-status weiter, siehe IKIT-Dokumentation.

Wenn Du was von Lisp-Makroprogrammierung verstehst, wäre eine einfache Alternative, sich ein Lisp-Makro zu schreiben, das in einen sd-defdialog-Aufruf expandiert.

  Claus

------------------
CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/

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

der_Wolfgang
Moderator
Tastenhauer


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

Beiträge: 2296
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build10.0.19045.5737
● Drafting V17~V20.7@job
● Modeling V17~V20.7@job
● Windchill 12.1.2.6@job
● UWGM Client 13.0.0.1@job
● Taschenrechner
● Stift+Zettel V8.42

erstellt am: 26. Apr. 2011 20:38    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 holt 10 Unities + Antwort hilfreich

Oha...


Also sd-defdialog ist ja nun selbst ein LISP Macro....

Ich habe mal einen macro drum rumgeschrieben, das den macro aufruft..  aber das ganze wird dann u.U. schon ziemlich lustig mit quote, backquote, aber insbesondere auch mit der Verwendung von @.

Und mit @ koennte es funktionieren.  Denn so habe ich mir extern eine Liste erzeugt und diese mit @.... irgendwas in den sd-defdialog geschleust. Aber das ist schon alles sehr lange her und mein Gedächtnis weist erhebliche Lücken auf.

Eine andere Variante ist:
definiere 10 (oder 5) variablen FIX und 'mappe' die gesamt liste 'page'-weise auf diese 5 Variablen. Einen solchen 'Blätter' mechanismus kann man bei im Annotation bei Mi-file-based symbolen mit 20..30.. Variablen sehen.

Guck dir mal sd-doc3d-create-symbol-dialog mit der :install-function an. Vielleicht erleuchtet es uns.

------------------
Seamonkey Firefox Thunderbird ● OSD Hilfeseite (de) / help page (en)NotePad++

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

clausb
Ehrenmitglied V.I.P. h.c.



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

Beiträge: 2914
Registriert: 20.12.2000

Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.

erstellt am: 26. Apr. 2011 21:11    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 holt 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von der_Wolfgang:
Oha...

Also sd-defdialog ist ja nun selbst ein LISP Macro....


Das ist gar kein Problem. Sieht man schon daran, dass in vielen Lisp-Implementierungen (unless) ein Makro ist, und das kann man wiederum natürlich problemlos auch innerhalb anderer Makros verwenden - beispielsweise in einem Aufruf von sd-defdialog.

Hintergrundmaterial zu Makros:


[Diese Nachricht wurde von clausb am 26. Apr. 2011 editiert.]

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

der_Wolfgang
Moderator
Tastenhauer


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

Beiträge: 2296
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build10.0.19045.5737
● Drafting V17~V20.7@job
● Modeling V17~V20.7@job
● Windchill 12.1.2.6@job
● UWGM Client 13.0.0.1@job
● Taschenrechner
● Stift+Zettel V8.42

erstellt am: 02. Mai. 2011 20:01    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 holt 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von clausb:
Das ist gar kein Problem
Das hatte ich ja auch nicht behauptet.. nur wird die Syntax halt u.U. ziemlich fieselig,fizzelich.. (fies?) Das war nur ein sd-display-warning meinerseites, kein sd-display-problem 

------------------
Seamonkey Firefox Thunderbird ● OSD Hilfeseite (de) / help page (en)NotePad++

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

holt
Mitglied
Systembetreuer CAD


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

Beiträge: 720
Registriert: 07.08.2003

Lenovo ThinkStation P360
Core i7-12700@2.10 GHz, 32GB
NVIDIA RTX A2000 12 GB
Creo Elements/Direct Modeling 20.5
Creo Elements/Direct Drafting 20.5
Creo Elements/Direct ModelManager 20.5

erstellt am: 21. Jun. 2011 15:49    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

Danke für eure Beiträge, dadurch (und mithilfe unseres ausgezeichneten Supports) bin ich zu der Erkenntnis gekommen, dass ein wenig mehr Code besser ist als solche unschönen Konstrukte.

Zitat:
Original erstellt von clausb:

Hört sich eher fischig an.


P.S.: Tut mir leid, dass ich mich so lange nicht gemeldet habe, war aber in letzter Zeit mit anderem beschäftigt und es hat doch eine zeitlang gedauert bis ich mich wieder in die Materie hineingearbetet habe um zu der Erkenntnis zu kommen 

------------------
Gruß aus dem Salzkammergut

Thomas

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

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)2025 CAD.de | Impressum | Datenschutz