如何调试 scheme if 语句
How to debug scheme if statment
我发现自己经常想检查语句并打印那里发生的事情。例如,使用这个基本示例:
(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:])
在上面的方案中是否有一种干净的或类似的方法来做到这一点?不平凡的程序通常如何 'debugged'?
if
用 print 语句进行调试会很麻烦,因为您不能为结果或替代项编写一个以上的表达式,如果您想要,则强制您使用 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
s:
(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)有一个内置的调试器。
我发现自己经常想检查语句并打印那里发生的事情。例如,使用这个基本示例:
(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:])
在上面的方案中是否有一种干净的或类似的方法来做到这一点?不平凡的程序通常如何 'debugged'?
if
用 print 语句进行调试会很麻烦,因为您不能为结果或替代项编写一个以上的表达式,如果您想要,则强制您使用 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
s:
(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)有一个内置的调试器。