Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Sofortiger Abbruch einer Funktion

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:  Sofortiger Abbruch einer Funktion (1618 mal gelesen)
WolfgangE
Mitglied



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

Beiträge: 1006
Registriert: 29.01.2003

Compass2000 in (fast) allen Ausbaustufen: Jobserver, ACM, Replikator, DBQ-Programmierung.
Programmierung, Wartung und Administration von MSSQL2000-Datenbanken.
Grundlegende Kenntnisse in AutoLisp-Programmierung.

erstellt am: 23. Jan. 2004 15:27    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 Lispler,

es kommt immer wieder mal, vor, dass ich eine Funktion an einer bestimmten Stelle sofort beenden will. Beispiel:

...
(IF (NOT value) ;; Nur ausführen, wenn Variable "value" belegt wurde!
  (QUIT)
  (PROGN
     ....
     ....
     ....
  )
)

Mit dem (QUIT) wird meine Funktion zwar sofort abgebrochen, ich erhalte aber immer folgende Ausgabe: "Fehler: Beenden/Verlassen abbrechen". Da schreit der Anwender natürlich sofort wieder, weil da das Wort "Fehler" vorkommt.
Wie kann ich also die Funktion ein einer bestimmten Stelle sofort abbrechen, ohne dass eine derartige Meldung erscheint?

Danke und ciao,
WolfgangE


------------------
An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!

[Diese Nachricht wurde von WolfgangE am 23. Jan. 2004 editiert.]

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: 23. Jan. 2004 15: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 Nur für WolfgangE 10 Unities + Antwort hilfreich

Hallo Wolfgang,

das ist eine Frage der Programmstruktur
ich würde es so machen:

Code:

(defun XXX (/ a b c)
(setq a ..)
(setq b ..)
(setq c ..)
(if c
  (yyy c)
  )
)
(defun YYY (var / x y c)
...
)


Somit ist der Programmablauf nicht abzubrechen, sondern läuft ohnehin nur in den Arbeitsbereich, wenn alle Bedingungen erfüllt sind.

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 24. Jan. 2004 10:40    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 WolfgangE 10 Unities + Antwort hilfreich

Die von Holger vorgeschlagene Strategie ist auf alle Fälle die saubere und elegantere Lösung - nicht nur für Lisp.
Egal, ob die Funktion nun quit, exit , goto (in anderen Programmiersprachen) heißen, es besteht immer die Gefahr, das programminterne Umstellungen von z.B. globalen (System-) Variablen oder "offene" Dateien nicht ordnungsgemäß zurückgesetzt werden. Ich weiß - dazu gibt es zur Not immer noch einen entsprechenden Errorhandler. Doch dieser sollte eigentlich nur zum Einsatz kommen, wenn Nutzerspezifische Fehler abgefangen werden müssen und dieses Abfangen anders mit zu hohem progammiertechnischen Aufwand verbunden ist.
Ich persönlich (* ist meine Meinung *) beginne jede Funktion mit Parameterübergabe mit einer Überprüfung dieser Parameter auf Sinnhaftigkeit. Dadurch erschließt sich dem Quellcodeleser auch gleich Typ und Inhalt der eigesetzten Variablen . Und Rechenzeit für so eine Überprüfung ist bei den heutigen Prozessoren nicht wirklich relevant.
Als Bsp. kannst du dir ja mal den Anhang unter http://ww3.cad.de/foren/ubb/Forum145/HTML/000382.shtml ansehen

Gruß Thomas

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

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

WolfgangE
Mitglied



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

Beiträge: 1006
Registriert: 29.01.2003

Compass2000 in (fast) allen Ausbaustufen: Jobserver, ACM, Replikator, DBQ-Programmierung.
Programmierung, Wartung und Administration von MSSQL2000-Datenbanken.
Grundlegende Kenntnisse in AutoLisp-Programmierung.

erstellt am: 26. Jan. 2004 08: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

Hallo Holger, hallo Thomas

genau den von Holger erwähnten Aufbau wollte ich vermeiden, weil ich es einfach übersichtlicher finde, sofort abzubrechen als ein weiters IF einzubauen. Da Holter aber offensichtlich recht viel Erfahrung hat (ich "beobachte" das Forum doch recht häufig) und aufgrund der Argumentation von Thomas ist es wohl besser, wenn ich's so beibehalte.

Danke euch beiden und ciao,
WolfgangE

------------------
An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 26. Jan. 2004 10:21    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 WolfgangE 10 Unities + Antwort hilfreich

Hi Wolfgang,
ich glaube Du hast da was mißverstanden.
"...sofort abzubrechen als ein weiters IF einzubauen..."

Es geht gar nicht um ein WEITERES If.

Es geht darum, dass Pgm einfach nur dann arbeiten zu lassen, wenn Deine Bedingungen (die Du ja eh abfragst) erfüllt sind.
Also nicht wie bei Dir:

Code:

(IF (NOT value)
  (QUIT)
  (PROGN
...
  )
)


sondern:
Code:

(IF value
  (PROGN
...
  )
)

Ich persönlich gebe aber meinen Usern gerne Rückmeldungen.
Bei mir sieht das dann so aus:

Code:

(IF (not value)
  (alert "Ey Idiot, Du hast [xyz] vergessen. Funktion beendet !)
  (PROGN
    [machwas]
...
  )
)

------------------
Ciao,
Marc

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

WolfgangE
Mitglied



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

Beiträge: 1006
Registriert: 29.01.2003

Compass2000 in (fast) allen Ausbaustufen: Jobserver, ACM, Replikator, DBQ-Programmierung.
Programmierung, Wartung und Administration von MSSQL2000-Datenbanken.
Grundlegende Kenntnisse in AutoLisp-Programmierung.

erstellt am: 26. Jan. 2004 11:22    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

Stimmt, das mit dem ZUSÄTZLICHEM if war ein Denkfehler. Das mit der Benuzterausgabe hat auch noch was für sich ...

------------------
An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!

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

Peter2
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3701
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2018
BricsCAD 22

erstellt am: 28. Jan. 2004 22:17    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 WolfgangE 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von WolfgangE:
Das mit der Benutzerausgabe hat auch noch was für sich ...

Ich schreibe auch immer viele Rückmeldungen in meine Programme - in vollem Bewusstsein, daß sie fast nicht gelesen werden. Aber das ist dann die Grundlage zu Schritt 2:

Schritt 1 (Marc): (alert "Ey Idiot, Du hast [xyz] vergessen. Funktion beendet !")

Schritt 2 (Peter2): "Ey Idiot, lies doch was da steht und mache es dann richtig .. ;-)

Peter2

[Diese Nachricht wurde von Peter2 am 28. Jan. 2004 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)2023 CAD.de | Impressum | Datenschutz