Hello all lispler
hät da eine Frage bezüglich der *error*-funktion bzw. dessen eigenschaften und methoden eine fehlerbasierte Itteration zu generieren, so alla "try and error"
folgendes Konstrukt:
(Frage: finde ich den fehler nicht oder ist es einfach nicht möglich)
Code:
(defun solve(in i / i in aus)
(princ (strcat "\nAnlauf Nr. " (rtos i) " mit VAR: \"in\" = " (rtos in)))
(Start_error
(strcat "*error*-Handler: " (rtos i))
'(lambda (a / )
(solve
(nth (1+ a) '(0 0 1 2 3 4 5))
(1+ a)
)
)
i
)
;------------------------------------
;fehlerquelle!
(if (< i (+ 6 1))
(/ 2 (float in))
'nil
)
;------------------------------------
)(defun Start_error (name expr in / previousHandler msg expr in)
(setq PreviousHandler *error*
*error*
(append
(cons '(msg / )
(list
(list
'princ
(list
'strcat
"\n"
name
": "
'msg
)
)
)
)
(list (list expr in))
(list
(list
'setq
'*error*
(if (null previoushandler)
'nil
(list
'Quote
PreviousHandler
)
)
)
)
)
)
)
Was passiert hier:
SOLVE erzeugt einen errorHandler und mit VAR:in=0 den "passenden" Fehler...
Im *error*Handler wird beim start durch Start_error ein '(lambda - Ausdruck an den errorHandler weitergegeben, welcher dann die Funktion SOLVE mit einem neuen VAR:in wiederrum aufruft... die VAR:i in SOLVE ist der Zähler welcher den Abbruch der Funktion nach (in diesem Fall) 6 Durchläufen an eine If-Anweisung gibt, sodass die Fehlerquelle nicht ausgeführt werden kann.
Die Frage: Fehler im Code, oooooooder ein grundsätzlicher Gedanken-Fehler weil sich der *error* in einer *error*-funktion nicht wohlfühlt?
zum Testen: (solve 0 0)
(ACHTUNG: !*error* wird am ende verändert sein)
lg reltro
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP