Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Zur Abwechslung ein Fehler MIT Lösung

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
Autor Thema:   Zur Abwechslung ein Fehler MIT Lösung (662 mal gelesen)
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: 04. Aug. 2004 23:13    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 Gemeinde!

Hier zur Abwechslung 'mal ein Beispiel zum Schmunzeln über einen Anfängerfehler, der, finde ich, wirklich nicht auf's erste so klar zu sehen ist: (Lösung weiter unten (für die Nicht-Profis))

; Wandelt 2 strings in Realzahlen um (Komma kann BEISTRICH ODER PUNKT sein),
; addiert diese und gibt das Ergebnis als string zurück
;
(defun #stradd (string01 string02 / antw)
  (if (and (equal 'STR (type string01)) (equal 'STR (type string02)))
    (progn (foreach stringNN '(string01 string02) ; wandelt die strings in reals um
            (setq stringNN (atof (#str1kommainpunkt (eval stringNN)))) ;#str1kommainpunkt wandelt in einem string das erste Komma in einen Punkt um und gibt den umgewandelten string zurück
            )
          (setq antw (rtos (+ string01 string02) 2))
    )
    (princ "\nMind. 1 Argument kein string!")
  )
)

LÖSUNG: Statt setq in foreach gehört nur set. Aber bis man da mal draufgekommen ist.... aaaaaahhhhhhhhhhhhhhhhhhhhhhhh   
...dann ist man aber sehr froh und muß fast über diesen Fehler lachen.   

Grüße, 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: 05. Aug. 2004 00:42    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 autocart 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von autocart:
muß fast über diesen Fehler lachen.

Aber über einen ganz anderen, und zwar über einen, den ich hier immer wieder predige:

Diese Funktion gibt einen String zurück, der normalerweise das in eine Zeichenkette umgewandelte Ergebnis zurückgibt. Dann hast du aber auch (im Prinzip löblich) daran gedacht, dass ein Argument den falschen Datentyp haben könnte. Dann druckt die Funktion eine Meldung aus - und da das das Letzte ist, was sie tut, ist der Datentyp der Rückgabe wieder ein String!

Meinst du, eine andere Funktion, die diese Funktion aufruft, liest die Meldungen auf dem Bildschirm mit? Ich denke, die wird den String "\nMind. 1 Argument kein string!" wie jede andere Rückgabe als korrektes Additionsergebnis verbuchen. Im Extremfall baust du dir damit eine Bemaßung mit dem Maßtext "Mind. 1 Argument kein string!". Wenn ein Fehler wirklich auffallen soll: weg mit dem (princ...), stattdessen nil zurückgeben.

Gruß, Axel Strube-Zettler

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

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: 05. Aug. 2004 09: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

Hallo Axel!
Eigentlich wollte ich eh auch fragen, was man an dieser Funktion noch verbessern könnte (ehrlich!!). Deshalb vielen Dank für die konstruktive Kritik.
Habe mich mit Error-Handling noch nicht befasst. Werde es aber noch tun.
Denke momentan, ich gebe lieber eine Fehlermeldung am Bildschirm aus - auch wenn das Programm damit eventuell verfälscht weiterläuft - damit ich bei einem nicht zufriedenstellenden Ergebnis leichter nachvollziehen kann, woran es lag. Bei einem nil weiß ich wieder nicht, an welcher Stelle der Fehler auftrat.
Natürlich ist das vor allem für die Testphase gedacht. Glaube dir aber, dass es bessere Methoden des Error-Handlings gibt. Wie gesagt, darüber muß ich erst in der VL-Hilfe nachlesen.

Wer will, mag bitte noch mehr konstrukive Kritik geben!

Danke, Stephan acart

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: 05. Aug. 2004 09:46    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 autocart 10 Unities + Antwort hilfreich

also für einen Anfänger ist der Umgang hier mit der Foreach-Schleife und dem SET ja schon rel. anspruchsvoll !

Aber ich versteh nicht ganz wofür. Um lediglich mit 2 Werte(strings) umzugehen, wäre mir das doch ein wenig zu aufwendig

wie wärs mit dieser lösung?
(defun #stradd (string01 string02 / )
  (if (and (equal 'STR (type string01)) (equal 'STR (type string02)))
      (rtos (+ (atof (#str1kommainpunkt string01))(atof (#str1kommainpunkt string02))) 2)
      (progn (princ "\nMind. 1 Argument kein string!") nil)
  )
)

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

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: 05. Aug. 2004 10:00    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 fuchsi!

Scheint wirklich besser zu sein!
Mein Problem: Wenn ich ein prog neu zu programmieren beginne mit "leerem" editor-Fenster, tu ich mir noch ein bissl schwer abzuschätzen, wie ich es am besten machen könnte und wie lang unterschiedliche code-versionen werden. In diesem Fall (sehr kurzes prog) magst du dich vielleicht wundern, da es recht einfach und (wie gesagt) kurz ist, aber ich tu mir da schon bei einer Zeile mit >= 2 Verschachtelungen schwer. Hoffe, dass sich mein Vorstellungsvermögen mit der Übung und kommenden Vertrautheit mit Befehlen verbessert.

Danke für den Tip, 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)2020 CAD.de | Impressum | Datenschutz