Me gustaría poder probar si una variable está definida, antes de acceder a ella.¿Cómo compruebo si una variable está definida antes de hacer referencia a ella?
Me gusta tener un global que especifique un "nivel de depuración". Si el nivel de depuración es 0, no se da salida adicional. Cuando es mayor que 1, se proporciona una salida de depuración, con más detalle en números mayores.
También me gustaría configurarlo para que los procedimientos se ejecuten, y asumir un nivel 0, si no hubiera llegado a definirlo. Algo así como:?.. (Donde defined?
es la magia no sé cómo hacer
(if (and (defined? debug-level) (> debug-level 1))
(diplay "Some debugging info"))
He mirado a través del resumen de las formas en The Scheme Programming Language, 4th Edition El único que vi era como una posibilidad identifier?
Se hizo . no funciona
estoy usando SISC 1.16.6 (reclamaciones R5RS cumplimiento) y V8 Chez Pequeño Esquema (reivindicaciones cumplimiento R6RS)
EDITAR he intentado envolver eval
con un guard
como:
(guard (x (else #f)) (eval 'debug-level))
Dado que 'debug-level
se cita, se puede evaluar y pasar al eval
. Entonces, cuando eval
intente evaluarlo, se produciría un error, que esperaba guard
atraparía. No fue así.
EDIT 2 me di cuenta que quería envolver el seguimiento de depuración en un procedimiento separado y que el archivo que define dicho procedimiento también puede definir debug-level
con un valor predeterminado de 0. Las razones para el uso de un procedimiento particular son para bajar el número de líneas en los procedimientos que sí funcionan y también para permitir la redirección de la salida de depuración si es necesario.
Gracias. Temía que la respuesta no fuera ampliamente portable, que sería algo nuevo en R6RS o específico de implementación. +1, pero voy a dejar que esta respuesta envejezca un poco, para ver si se publican mejores ideas antes de aceptarlas como correctas. –