Scheme 在Guile中跟踪-如何在Guile方案中跟踪

Scheme 在Guile中跟踪-如何在Guile方案中跟踪,scheme,trace,guile,Scheme,Trace,Guile,Chez方案中的(跟踪过程)和(跟踪let(绑定)体)跟踪设施在Guile方案中的等价物是什么 我已经查看了上的文档,但是我无法从源代码文件中找到如何使用Guile跟踪过程,而不是从Guile REPL中找到。Guile REPL可以通过,trace(过程应用程序)完成,因为以前导入的模块(使用模块(系统虚拟机跟踪)) 我感兴趣的是从源代码跟踪递归过程的应用程序,类似于(trace fact1),并将下面的输出输出到控制台 trace: (fact1 4) trace: | (fact1 3)

Chez方案中的
(跟踪过程)
(跟踪let(绑定)体)
跟踪设施在Guile方案中的等价物是什么

我已经查看了上的文档,但是我无法从源代码文件中找到如何使用Guile跟踪过程,而不是从Guile REPL中找到。Guile REPL可以通过
,trace(过程应用程序)
完成,因为以前导入的模块
(使用模块(系统虚拟机跟踪))

我感兴趣的是从源代码跟踪递归过程的应用程序,类似于
(trace fact1)
,并将下面的输出输出到控制台

trace: (fact1 4)
trace: |  (fact1 3)
trace: |  |  (fact1 2)
trace: |  |  |  (fact1 1)
trace: |  |  |  |  (fact1 0)
trace: |  |  |  |  1
trace: |  |  |  1
trace: |  |  2
trace: |  6
trace: 24
命名的let
(let name(bindings)body)
语法扩展是否可以用Guile进行跟踪?在研究过程的尾部递归实现时,需要这样做


多谢各位

请参见在过程调用时添加陷阱!在页面上

例如:

(define (factorial n)
  (fact-iter 1 1 n))
(define (fact-iter product counter max-count)
  (if (> counter max-count)
      product
      (fact-iter (* counter product)
 (+ 1 counter)
 max-count)))
(add-trace-at-procedure-call! fact-iter)
(add-trace-at-procedure-call! factorial)
(factorial 6)
$41 = 7
$42 = 8
Trap 8: (factorial 6)
Trap 7: (fact-iter 1 1 6)
Trap 7: |  (fact-iter 1 2 6)
Trap 7: |  |  (fact-iter 2 3 6)
Trap 7: |  |  |  (fact-iter 6 4 6)
Trap 7: |  |  |  |  (fact-iter 24 5 6)
Trap 7: |  |  |  |  |  (fact-iter 120 6 6)
Trap 7: |  |  |  |  |  |  (fact-iter 720 7 6)
Trap 7: |  |  |  |  |  |  720
Trap 7: |  |  |  |  |  720
Trap 7: |  |  |  |  720
Trap 7: |  |  |  720
Trap 7: |  |  720
Trap 7: |  720
Trap 7: 720
Trap 8: 720
$43 = 720
析因和事实iter取自SICP 1.2.1

我不知道如何让它显示尾部递归,或者这是否意味着没有尾部递归调用优化。但它可以追溯