使用trace在球拍中显示一个程序

Lia*_*avK 5 scheme sicp racket

我一直在研究SICP的最后几个练习,其中几个练习使用高阶函数.目前我正在尝试将我的解决方案中的问题调试到1.45,这会导致arity不匹配.提高误差的功能是两次对定点函数求解器应用平均操作的结果.

它将使我调试的努力了很多容易,如果我可以只转储某种程序表示,鉴于该程序已经通过其他几个能够改变它,它会引发错误之前的程序运行.我看过对DrRacket,增加了调试文件(require racket/trace)(require errortrace)我的模块,我认为我熟悉的调试系统的所有功能-但我仍然不知道如何做到这一点.

DrRacket的答案是理想的,但任何事情都有帮助.

Dav*_*nos 5

添加(需要球拍/跟踪)不会在控制台中抛出任何过程显示.(trace function-name)当您在跟踪调用中使用给定函数时,您希望使用它将在控制台中打印紫色(默认颜色)行.例

(define sum (? (x y) (+ x y)))
(define multiply
  (? (x y)
    (multiply-aux x y x)
    ))
(define multiply-aux (? (x y res) 
                       (if (= y 0) 0 
                           (if (= y 1) res 
                               (multiply-aux x (- y 1) (sum res x))))))
(require racket/trace)
(trace sum)
Run Code Online (Sandbox Code Playgroud)

在控制台中:

> (multiply 4 5)
>(sum 4 4)
<8
>(sum 8 4)
<12
>(sum 12 4)
Run Code Online (Sandbox Code Playgroud)

在DrRacket 6.0.1中测试过

如果您需要更多帮助,请告诉我.