Lisp sigma函数递归 - 帮我跟踪它.我在逻辑上得到它,我只需要理解这个例子,这样我就可以完成我的任务.我不确定第4和第5行发生了什么,x
正在设置的是什么.如果我的输入是(sigma f 1 2)
我的输出20
,那么另一个例子就是(sigma f 1 5)
.如果你能帮我追踪它.我会发布sigma
下面的定义.谢谢您的帮助.
(defun sigma (f m n)
(if (> m n)
0
(let ((x (sigma f (+ m 1) n)))
(+ (funcall f m)
x))))
Run Code Online (Sandbox Code Playgroud)
您还可以跟踪您的功能.由于你需要一个辅助函数,让我们定义myfun
,它将其参数乘以2.
CL-USER> (defun myfun (x) (* x 2))
MYFUN
Run Code Online (Sandbox Code Playgroud)
TRACE
两个功能:
CL-USER> (trace sigma myfun)
Run Code Online (Sandbox Code Playgroud)
然后,你应该有这样的事情:
CL-USER> (sigma 'myfun 0 5)
0: (SIGMA MYFUN 0 5)
1: (SIGMA MYFUN 1 5)
2: (SIGMA MYFUN 2 5)
3: (SIGMA MYFUN 3 5)
4: (SIGMA MYFUN 4 5)
5: (SIGMA MYFUN 5 5)
6: (SIGMA MYFUN 6 5)
6: SIGMA returned 0
6: (MYFUN 5)
6: MYFUN returned 10
5: SIGMA returned 10
5: (MYFUN 4)
5: MYFUN returned 8
4: SIGMA returned 18
4: (MYFUN 3)
4: MYFUN returned 6
3: SIGMA returned 24
3: (MYFUN 2)
3: MYFUN returned 4
2: SIGMA returned 28
2: (MYFUN 1)
2: MYFUN returned 2
1: SIGMA returned 30
1: (MYFUN 0)
1: MYFUN returned 0
0: SIGMA returned 30
30
Run Code Online (Sandbox Code Playgroud)