对象不适用于 MIT 方案(不同的阿克曼函数)
Object not applicable in MIT Scheme (a different Ackermann's function)
我找到了这个版本的 Ackermann 函数并尝试用 MIT Scheme Lisp 编写它但没有成功:
The Ackermann Function A(m,n)
When m=0
A(m,n)=n+1
When m>0 and n=0
A(m,n)=A(m-1,1)
When m>0 and n>0
A(m,n)=A(m-1,A(m,n-1))
(在此处找到 http://www.gfredericks.com/sandbox/arith/ackermann)
我的方案代码:
(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
(acker2 2 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,系统尝试将其应用于 (- n 1)
。但是数字 2(“对象 2”)不是函数(“不适用”)。
我找到了这个版本的 Ackermann 函数并尝试用 MIT Scheme Lisp 编写它但没有成功:
The Ackermann Function A(m,n)
When m=0
A(m,n)=n+1
When m>0 and n=0
A(m,n)=A(m-1,1)
When m>0 and n>0
A(m,n)=A(m-1,A(m,n-1))
(在此处找到 http://www.gfredericks.com/sandbox/arith/ackermann)
我的方案代码:
(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
(acker2 2 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,系统尝试将其应用于 (- n 1)
。但是数字 2(“对象 2”)不是函数(“不适用”)。