lisp基本递归函数.帮我追踪它

Xav*_*ado 2 common-lisp

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)

cor*_*ump 5

您还可以跟踪您的功能.由于你需要一个辅助函数,让我们定义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)