scheme - Scheme中的阿克曼函数
问题描述
我已经设置了我的功能,但我不确定为什么它没有按我想要的方式工作。
(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)))))))
我是个白痴,我在再次查看阿克曼函数后能够得到它
解决方案
正确缩进代码有助于查看其结构是否正确:
(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 中,这种结构甚至是不合法的。
(那是在阅读你的代码之前,只是从它的结构来看)。
推荐阅读
- firebase - Firebase 使用 gapi 客户端将 defaultLocation:finalize 设置为 Datastore 模式而不是 Native 模式
- r - R中的循环和renderText闪亮
- elixir - 在浏览器 Elixir 中下载分块文件失败
- json - 在 React JS 中解析 JSON 并填充到表中
- javascript - 从另一个 HTML 文件中的表中检索特定行 - Javascript
- c++ - 释放前的临时指针?
- sql - Postgres 生成 json 树
- python - zarr 何时压缩块并将其推送到底层存储系统?
- flutter - 在颤振应用程序中找到资产文件的路径
- vue.js - vue.config.js devServer 未考虑在内