Я бы хотел иметь возможность проверить, определена ли переменная, прежде чем получить к ней доступ.
Мне нравится иметь глобальный объект, который определяет «уровень отладки». Если уровень отладки равен 0, дополнительные выходные данные не выдаются. Если значение больше 1, выводится отладочная информация с большей детализацией при больших числах.
Я также хотел бы настроить его так, чтобы процедуры запускались и принимали уровень 0, если я не удосужился его определить. Что-то вроде: (где defined?
магия, которую я не знаю, как делать?
(if (and (defined? debug-level) (> debug-level 1))
(diplay "Some debugging info"))
Я просмотрел сводку форм в Язык программирования схем, 4-е издание . Единственная возможность, которую я видел, была identifier?
. Это не сработало.
Я использую SISC 1.16.6 (заявляет о соответствии R5RS) и Chez Petite Scheme v8 (заявляет о соответствии R6RS)
РЕДАКТИРОВАТЬ Я пытался обернуть eval
с guard
как:
(guard (x (else #f)) (eval 'debug-level))
Поскольку 'debug-level
заключено в кавычки, оно может быть оценено и передано в eval
. Затем, когда eval
попытается оценить его, произойдет ошибка, которую, я надеялся, поймает guard
. Это не так.
EDIT 2 Я понял, что хочу обернуть отладочную трассировку в отдельную процедуру и что файл, который определяет эту процедуру, может также определить debug-level
со значением по умолчанию 0. Причины использования Отдельная процедура состоит в том, чтобы уменьшить количество строк в процедурах, которые работают, а также разрешить перенаправление вывода отладочной информации, если это необходимо.