Closed. This question is off-topic. It is not currently accepting answers. Learn more
想改进这个问题吗Update the question所以堆栈溢出的值小于aa>。
两年前关闭。
我找到了Ackermann函数的这个版本,并试图用MIT Scheme Lisp编写它,但没有成功:
阿克曼函数A(m,n)
当m=0时
A(m,n)=n+1
当m>0且n=0时
A(m,n)=A(m-1,1)
当m>0且n>0时
A(m,n)=A(m-1,A(m,n-1))
(在这里找到on-topic
我的方案代码:
(define (acker2 m n)
        (cond ((= m 0)
               (+ n 1))
              ((and (> m 0)
                    (= n 0))
               (acker2 (- m 1)
                       1))
              ((and (> m 0)
                    (> n 0))
               (acker2 (- m 1)
                       (acker2 (m
                               (- n 1)))))))

现在有一些结果:
(确认2 0 0)
值:1
(确认2 0 1)
值:2
(应答器2 0 2)
值:3
(应答器2 2 2)
对象2不适用
(确认2 1 23)
对象1不适用
(确认2 8 0)
对象7不适用
解决办法是什么?

最佳答案

最后一个表达式中有错误(括号太多):

(acker2 (m (- n 1)))

这应该是:
(acker2 m (- n 1))

请记住,在Lisp/Scheme中(a b1 b2 ...)表示“将函数a应用于参数b1 b2 ...”消息“object 2 is not applicable”(对象2不适用)正是指:m等于2,系统试图将其应用于(- n 1)但数字2(“对象2”)不是函数(“不适用”)。

10-05 18:08