Mi piacerebbe essere in grado di verificare se una variabile è definita, prima di accedervi.Come verificare se una variabile è definita prima di farla riferimento?
Mi piace avere un globale che specifica un "livello di debug". Se il livello di debug è 0, non viene fornito alcun output extra. Quando è maggiore di 1, viene fornito l'output di debug, con più verbosità a numeri maggiori.
Mi piacerebbe anche configurarlo in modo che le procedure vengano eseguite e assumere un livello 0, se non avessi avuto modo di definirlo. Qualcosa come:?.. (Dove defined?
è la magia non so come fare
(if (and (defined? debug-level) (> debug-level 1))
(diplay "Some debugging info"))
ho guardato attraverso la sintesi di forme in The Scheme Programming Language, 4th Edition L'unico che ho visto come una possibilità era identifier?
Ha fatto . non funziona
sto usando SISC 1.16.6 (sostiene R5RS compliance) e Chez Petite Scheme v8 (sostiene il rispetto R6RS)
EDIT ho provato avvolgendo eval
con un guard
come:
(guard (x (else #f)) (eval 'debug-level))
Poiché 'debug-level
è quotato, può essere valutato e passato a eval
. Quindi, quando eval
prova a valutarlo, si verificherà un errore, che speravo che lo guard
catturasse. Non è stato così.
EDIT 2 mi sono reso conto che volevo avvolgere il debug di tracciare in una procedura separata e che il file che definisce tale procedura può anche definire debug-level
il valore predefinito è 0. Le ragioni per l'utilizzo di una procedura separata sono per abbassare il numero di linee nelle procedure che funzionano e anche per consentire il reindirizzamento dell'output di debug se necessario.
Grazie. Temevo che la risposta non sarebbe stata ampiamente condivisibile, che sarebbe stata una novità in R6RS o specifica di implementazione. +1, ma ho intenzione di lasciare che questa risposta invecchi un po ', per vedere se qualche idea migliore viene pubblicata prima di accettarla come corretta. –