Recursion 对象不适用于MIT方案(不同的Ackermann函数)
我找到了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)) (在这里找到) 我的计划编号:Recursion 对象不适用于MIT方案(不同的Ackermann函数),recursion,scheme,lisp,mit-scheme,ackermann,Recursion,Scheme,Lisp,Mit Scheme,Ackermann,我找到了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)) (在这里找到) 我的计划编号: (define (acker2 m n) (cond ((= m 0) (+ n 1)) ((and (&g
(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)))))))
现在有一些结果:
(acker2 0 0)
价值:1
(acker2 0 1)
价值:2
(acker2 0 2)
价值:3
(阿克尔2)
对象2不适用
(acker2 1 23)
对象1不适用
(acker2 8 0)
对象7不适用
解决方案是什么?上一个表达式中有一个错误(括号太多):
(acker2 (m (- n 1)))
这应该是:
(acker2 m (- n 1))
请记住,在Lisp/Scheme(a b1 b2…
中,表示“将函数a
应用于参数b1 b2…
”。消息“对象2不适用”的确切含义是:m
等于2,系统尝试将其应用于(-n1)
。但是数字2(“对象2”)不是函数(“不适用”)。最后一个表达式中有一个错误(括号太多):
(acker2 (m (- n 1)))
这应该是:
(acker2 m (- n 1))
请记住,在Lisp/Scheme(a b1 b2…
中,表示“将函数a
应用于参数b1 b2…
”。消息“对象2不适用”的确切含义是:m
等于2,系统尝试将其应用于(-n1)
。但数字2(“对象2”)不是函数(“不适用”)