[英]Ackerman Function in Scheme
我已经设置了我的 function 但我不确定为什么它没有按照我的预期工作。
(define (ack m n) (if (= m 0) (+ n 1)
(if (and (> m 0) (= n 0)) (ack (- m 1) 1)
(if (and (> m 0) (> n 0)) (ack (- m 1) (- n 1))))))
这就是我所关注的:
编辑:
(define (ack m n)
(if (= m 0)
(+ n 1)
(if (and (> m 0) (= n 0))
(ack (- m 1) 1)
(if (and (> m 0) (> n 0))
(ack (- m 1) (ack m (- n 1)))))))
我是个白痴,我在再次查看阿克曼 function 后能够得到它
正确缩进代码有助于查看其结构是否正确:
(define (ack m n)
(if (= m 0)
(+ n 1)
(if (and (> m 0) (= n 0))
(ack (- m 1) 1)
(if (and (> m 0) (> n 0))
(ack (- m 1) (- n 1))
;; otherwise ......... what?
))))
一个if
表达式最好有两个分支,即consequent和alternate ,否则如果测试失败并且没有备用,在 R5RS 下结果是 undefined 。 而在 Racket 中,这种结构甚至是不合法的。
(那是在阅读你的代码之前,只是从它的结构来看)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.