Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Variable??

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:  Variable?? (1413 mal gelesen)
Moony
Mitglied
Werkzeugmacher


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

Beiträge: 49
Registriert: 29.02.2004

erstellt am: 25. Mrz. 2004 15:16    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 zusammen,

wieder mal ein Anfängerproblem.
Wie und wann ist eine Variable lokal oder global.


(defun c:hauptprog( / Var1)  ; (globale Var / lokale Var)?
..
(unterprog)
..
)

(defun unterprog( / a)
...
)
******

(defun c:hauptprog(b / Var1)
..
..
)
wenn ich b so definiere kommt die Fehlermeldung "zuwenig Agumente"


Gruß Moony

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 25. Mrz. 2004 15: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 Moony 10 Unities + Antwort hilfreich

Hallo Moony,

alle Variablen, die nicht in der Klammer nach dem (defun Name (..) stehen, sind Global.

die Aufteilung in der Klammer selbst ist wie folgt:

(defun Name (parameterA parameterB / variable1 variable2)
...)

Eine Funktion, die so definiert ist, erwartet 2 Parameter, wenn diese aufgerufen wird.
(defun vari_alert (Text /)
(alert Text)
)
(vari_alert "hallo")
oder
(setq vari1 "Du da")
(vari_alert vari1)

Nachlesen kannst du das auch in der Serie 'Einführung in Autolisp', zu finden auf meiner Seite unter Training->AutoLISP Training.

Bei Fragen ...

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 25. Mrz. 2004 19:26    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 Moony 10 Unities + Antwort hilfreich

Moony,

wenn du in deinem Beispiel eine Fehlermeldung kassierst, dann hast du die Leerstelle zwischen / und a vergessen. Eine andere Möglichkeit sehe ich im Moment nicht. AutoLisp hindert dich nicht daran, ein Symbol /a zu nennen:

(defun b( /a) ...) ist also eine Funktion, die 1 Argument erwartet, und das heisst /a.

Gruß, Axel

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

Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze
Meine Überzeugung...

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

Moony
Mitglied
Werkzeugmacher


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

Beiträge: 49
Registriert: 29.02.2004

erstellt am: 26. Mrz. 2004 06:54    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 Morgen,

nein Axel das war nur ein Tipfehler.
Ich hatte beim Funktionsaufruf ( wie Holger schrieb)den Prameter vergessen.
(unterprog b)

Danke Moony

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

autocart
Mitglied
Technischer Redakteur


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

Beiträge: 695
Registriert: 08.09.2003

erstellt am: 08. Jul. 2004 20:09    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 Moony 10 Unities + Antwort hilfreich

Hi an alle Checker,
ich hätte da auch eine Frage zu den globalen Variablen, die mir so durch den Kopf geht...

Kann ich globale Variablen auch wieder bewusst löschen, nachdem ich sie in einer anderen Funktion definierte? (ich meine nicht auf nil setzten, sondern tatsächlich löschen)

Das mit den globalen Variablen ist in der online-Hilfe ja entsetzlich schlecht beschrieben. Oder ich habe das richtige Kapitel noch nicht gefunden - ist ja auch nicht gerade sehr userfreundlich die Hilfe (Es scheint zwar viel Information in die Hilfe hineingepackt zu sein, aber deutsch/englisch gemischt und wie mir vorkommt diverse Themen doppelt vorhanden oder verwirrend strukturiert!)

ciao, freue mich schon auf meinen Italien-Urlaub,
Stephan

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

autocart
Mitglied
Technischer Redakteur


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

Beiträge: 695
Registriert: 08.09.2003

erstellt am: 08. Jul. 2004 21:06    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 Moony 10 Unities + Antwort hilfreich

...und wenn eine globale Variable automatisch auch ohne setq erzeugt wird, wie ist es dann am besten zu handhaben? Soll man trotzdem beim erzeugen immer setq verwenden, oder nicht? Ich nehme mal an, das beste ist zumindest Konsistenz, also nicht einmal ohne und ein andermal mit setq.
Danke für's Kopf zermartern.
Grüße und schönes Wochenende,
Stephan acart

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 08. Jul. 2004 22: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 Moony 10 Unities + Antwort hilfreich

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

autocart
Mitglied
Technischer Redakteur


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

Beiträge: 695
Registriert: 08.09.2003

erstellt am: 09. Jul. 2004 10:19    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 Moony 10 Unities + Antwort hilfreich

Danke mapcar.
Ich habe erst angefangen, mich mit AutoLisp zu beschäftigen. Glaube, dass ich noch mehr eintauchen muss um das meiste zu verstehen. Sonst poste ich eh' wieder.
thankful greetings, Stephan acart

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