使用 CHICKEN 可视化递归函数调用的正确方法是什么?

What is the proper way to visualize recursive function calls with CHICKEN?

我是 scheme 的新手(我的 lisp 经验仅限于配置 emacs),我正在努力更好地理解递归和 conses。我想要调试输出,显示对函数的每次调用,这样我可以更好地可视化递归。

四处寻找,我想到了

(define (last lst)
  (if (null? (cdr lst))
      (car lst)
      (last (cdr lst))))

获取列表的最后一个成员。它似乎工作。为了调试这个,我想出了

(define (last lst)
  (print "Debug: " lst)
  (if (null? (cdr lst))
      (car lst)
      (last (cdr lst))))

(last '(a b c d)) 结果是

Debug: (a b c d)
Debug: (b c d)
Debug: (c d)
Debug: (d)

在 CHICKEN 中,是否有更惯用的方法来获取每次函数调用的调试输出,以便我可以看到函数调用的进展情况?

不,我基本上也是这样做的。如果你想要更方便的东西,你可以试试trace egg,它可以自动给你调用嵌套和输入参数。

如果您想更高级一点,可以使用 CHICKEN 附带的 "Feathers" 调试器。