如何解决if语句如何调试方案
我发现自己经常想检查报表并打印那里发生的事情。例如,使用这个基本示例:
(define (example-debug lst)
(if (null? lst)
'()
(example-debug (cdr lst))))
(example-debug '(1 2 3))
如何在 if
语句的两个部分都显示?以python为例,我可能有这样的事情:
def example_debug(lst):
if not lst:
print ("End of list reached")
else:
print ("Element is: %s" % lst[0])
example_debug(lst[1:])
在上述方案中是否有一种干净的或类似的方法来做到这一点?非平凡程序通常如何“调试”?
解决方法
使用打印语句调试 if
会很麻烦,因为您不能为结果或替代编写多个表达式,如果您想执行更多操作,则必须使用 begin
不止一件事(我使用的是特定于 Racket 的 printf
,请根据您的解释器进行调整):
(define (example-debug lst)
(if (null? lst)
(begin
(printf "End of list reached~n")
'()) ; this proc always returns '(),not very useful!
(begin
(printf "Element is: ~a~n" (first lst))
(example-debug (cdr lst)))))
使用带有隐式 cond
的 begin
会更易读:
(define (example-debug lst)
(cond ((null? lst)
(printf "End of list reached~n")
'())
(else
(printf "Element is: ~a~n" (first lst))
(example-debug (cdr lst)))))
但要真正回答您的问题:不要使用打印来调试:)。一个好的 IDE(比如 Racket)有一个内置的调试器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。