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)
我的方案代码:
现在有一些结果:
(确认2 0 0)
值:1
(确认2 0 1)
值:2
(应答器2 0 2)
值:3
(应答器2 2 2)
对象2不适用
(确认2 1 23)
对象1不适用
(确认2 8 0)
对象7不适用
解决办法是什么?
这应该是:
请记住,在Lisp/Scheme中
想改进这个问题吗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