gpt4 book ai didi

debugging - Lisp 展开/部分评估功能

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:08 27 4
gpt4 key购买 nike

有没有办法像下面这样在 Common Lisp 中显示评估步骤:

> (defun fac (n) (if (= n 0) 0 (if (= n 1) 1 (* n (fac (- n 1))))))
FAC
> (step-by-step (fac 3))
0: (FAC 3)
1: (* 3 (FAC 2))
3: (* 3 (* 2 (FAC 1)))
4: (* 3 (* 2 (1)))
5: (* 3 2)
6: 6
Result: 6

寻找一种方法来可视化一门小型类(class)的递归和返回值。我知道 (step fn)(optimize (debug 3))) 不幸的是,这不会产生所需的输出,或者我不知道如何告诉它.

注意:首选非 emacs/slime 解决方案

最佳答案

这不是您要求的所有内容,具体输出取决于实现,但您可能会从标准 trace 中获得一些好处.它不会像您展示的那样显示扩展,但这绝对是满足一些您的要求的一种方式

[to] visualize recursion and return values in general … to see the whole expression on each step. Like having a debug print of each function call.

许多实现包括额外的参数,这些参数可以自定义如何跟踪事物、打印什么等。这是 SBCL 的默认行为示例:

CL-USER> (defun fac (n) (if (= n 0) 0 (if (= n 1) 1 (* n (fac (- n 1))))))
FAC
CL-USER> (trace fac)
(FAC)
CL-USER> (fac 3)
0: (FAC 3)
1: (FAC 2)
2: (FAC 1)
2: FAC returned 1
1: FAC returned 2
0: FAC returned 6
;=> 6

在 CLISP 中:

CL-USER> (fac 3)
1. Trace: (FAC '3)
2. Trace: (FAC '2)
3. Trace: (FAC '1)
3. Trace: FAC ==> 1
2. Trace: FAC ==> 2
1. Trace: FAC ==> 6
;=> 6

关于debugging - Lisp 展开/部分评估功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31404667/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com