Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  PTC Creo Elements/Programmierung
  Fortlaufender Variablenname

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
  
Behalten Sie Ihre IT-Sicherheit im Überblick, eine Pressemitteilung
Autor Thema:  Fortlaufender Variablenname (538 mal gelesen)
uli1601
Mitglied
Konstrukteur


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

Beiträge: 16
Registriert: 19.07.2007

Creo Elements/Direct3D 19.0
MM 19.0
Intel Xeon mit 64GB RAM
Windows 7

erstellt am: 22. Apr. 2009 22:52    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

Guten Abend allerseits,

ich habe mal wieder ein Problem. Ich stoße mit meinen begrenzten LISP-Kentnissen mal wieder an meine Grenzen: :-)

Ich habe mir ein defstuct "ergebnis" festgelegt. Nun würde ich gerne verschiedene Instanzen mit fortlaufender Variablenbezeichnung (z.B. ergebnis1) von meinem defstruct erzeugen. Hier mal mein Codeschnipsel dazu:

Code:

(setf zaehler (+ zaehler 1))
(setf (sd-read-from-string (format NIL "ergebnis~A" zaehler)) (make-ergebnis ...))

Allerdings kann ich so keine Variablenbezeichnung erzeugen. Der Code liefert mir einen Fehler, dass das "(sd-read-from-string (format NIL "ergebnis~A" zaehler))" nicht erlaubt ist.
Kann mir jemand weiterhelfen, ob und wie ich eine solche fortlaufende Variable realisieren könnte?

schönen Abend
Uli

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: 22. Apr. 2009 23:30    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 uli1601 10 Unities + Antwort hilfreich

Zur Laufzeit dynamisch Variablensymbole anlegen und sie an Instanzen Deiner Struktur binden? Auch sowas geht in Lisp - anders als in vielen anderen Sprachen übrigens. Aber ich bin mir ziemlich sicher, dass Du das nicht wirklich willst oder Dir vielleicht nicht überlegt hast, was das alles nach sich zieht. Das Vorhaben sieht wirklich arg fischig aus.

Wieso legst Du nicht einfach ein Array von Strukturen an? (Siehe dazu beispielsweise http://l1sp.org/cl/make-array  ) Oder noch schlichter eine Liste?

Claus


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

[Diese Nachricht wurde von clausb am 23. Apr. 2009 editiert.]

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

uli1601
Mitglied
Konstrukteur


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

Beiträge: 16
Registriert: 19.07.2007

erstellt am: 23. Apr. 2009 17: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

Vielen Dank Claus, für die Tipps. Ich sehe schon, das mit defstruct war keine so gute Idee :-)

Ich habe nun mal versucht, ein Array aufzubauen (mit Arrays habe ich bisher in LISP noch nichts gemacht...)

Code:
(setf ergebnis_array
  (make-array '(1 3)
    :adjustable t
    :initial-contents '(("sigma(N/mm^2)" "tau(N/mm^2)" "sigmav(N/mm^2)"))))

Soweit, so gut, jetzt habe ich mal mein Startarray bei der Initialisierung meines Dialogs erzeugt.
Das möchte ich nun gerne erweitern und mit Werten füllen (deshalb um eine Zeile erweitern):

Code:
(setf ergebnis_array
  (adjust-array ergebnis_array '((+ 1 (array-rank ergebnis_array)) 13)))

Allerdings ist "'((+ 1 (array-rank ergebnis_array))" der falsche Ausdruck, ich bekomm eine Meldung, dass eine positive "fixnum" erwartet wird. Wenn ich anstatt dem Ausdruck einfach eine 2 schreibe, funktioniert das Ganze:

Code:
(setf ergebnis_array
    (adjust-array ergebnis_array '(2 13)))

Wobei ich bisher keine Ahnung habe, wie ich dann mein Array jeweils zeilenweise mit Werten (die ich als Variablen zur Verfügung habe) füllen kann...

Hintergrund ist der, dass ich mir ein einfaches Biegeberechnungsprogramm geschrieben habe, bei dem ich einen Punkt auf einer Arbeitsebene anklicken kann, und mir dann sigma und tau an dieser Stelle ausgegeben werden. Diese ausgegebenen Werte würde ich gerne für jeden Klick speichern.

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: 23. Apr. 2009 19: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 Nur für uli1601 10 Unities + Antwort hilfreich

Gegen die Verwendung von Strukturen (die mit defstruct definiert werden) ist gar nichts einzuwenden - meine Zweifel betrafen die Idee, dynamisch Variablen zu erzeugen. Wie gesagt, Lisp kann sowas im Unterschied zu vielen anderen Sprachen, aber selbst in Lisp nutzt man solche Moeglichkeiten nicht so oft, meistens eher in mit defmacro erzeugten Makros.

Dein Problem bei der Erweiterung des Arrays ist ein simples Quotierungsproblem, das wir schon ab und an mal hatten. Abhilfe:

Code:
(setf ergebnis_array
(adjust-array ergebnis_array `((+ 1 ,(array-rank ergebnis_array)) 13)))

Allerdings solltest Du zunaechst ueberlegen, ob Du wirklich ein Array brauchst. Wie Du gesehen hast, sind dynamische Lisp-Arrays unter Umstaenden etwas wortreich in der Programmierung. Viel einfacher geht das mit Listen.

Welche Datenstruktur in Deinem Fall am besten ist, musst Du aufgrund Deiner Anforderungen entscheiden. Arrays bieten sich von der Geschwindigkeit her an, wenn man oft wahlfrei auf Elemente im Array zugreifen muss. Listen sind optimal, wenn man sie im Code ohnehin immer komplett von vorne bis hinten abarbeitet, oder wenn man sie an Code weitergeben muss, der Listen erwartet. Listen sind auch bei wahlfreiem Zugriff akzeptabel, solange sie nicht zu gross werden.

Zitat:
Hintergrund ist der, dass ich mir ein einfaches Biegeberechnungsprogramm geschrieben habe, bei dem ich einen Punkt auf einer Arbeitsebene anklicken kann, und mir dann sigma und tau an dieser Stelle ausgegeben werden. Diese ausgegebenen Werte würde ich gerne für jeden Klick speichern.

Diese Beschreibung klingt zunaechst mal so, als ob eine einfache Liste hier ausreicht. Damit wuerde Dein Code vermutlich trivial. Ob Du in Deiner Liste mit defstruct definierte Strukturen speicherst oder aber einfach wiederum drei(?)elementige Listen, ist eine andere und eher nebensaechliche Frage.

Code-Anregungen, voellig ungetestet:

Code:

(in-package :biegeberechnung)
(use-package :Oli)

(defstruct point sigma tau sigmav)

(defparameter *pointlist* nil)

(defun add-point(sigma tau sigmav)
(push (make-point :sigma sigma :tau tau :sigmav sigmav) pointlist))


Claus

[Diese Nachricht wurde von clausb am 23. Apr. 2009 editiert.]

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