微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

if语句如何调试方案

如何解决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)))))

使用带有隐式 condbegin 会更易读:

(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 举报,一经查实,本站将立刻删除。