【发布时间】:2013-11-12 01:28:46
【问题描述】:
我正在使用带有完整 Swindle 包的 Scheme,并且我正在尝试使用条件来递归地确定整数的偶数/奇数。我的代码如下:
(define (odd? x)(
(cond
((= x 0) '#f)
((= x 1) '#t)
((= (even? (- x 1)) #t) '#f)
(else '#t))))
(define (even? x)(
(cond
((= x 0) '#f)
((= x 2) '#t)
((= (odd? (- x 1)) #t) '#f)
(else '#t))))
但是,当我运行 (even?x) 或 (odd?x) [x 是某个数字,没关系,因为我得到同样的错误] 我得到:应用程序:不是过程; 期望一个可以应用于参数的过程 给定:#t 参数...:[无]
有人可以帮忙吗?谢谢。我不是 100% 熟悉理想的 Scheme 语法,所以可能就是这样。
【问题讨论】:
-
首先,您的 cond 语句之前有一个额外的括号。第二个 '=' 只比较数值。你已经期待了吗?返回一个真假。 3. 你为什么在奇数和偶数之间跳来跳去,你的筹码量或你的筹码一直这样增长。跳过第三种情况,让你的 else 跳转到 (even? (- x 2)) 的尾调用。 4. 负数呢?
-
@WorBlux 到您的 3.,在 Scheme 中,相互尾递归过程保证在恒定堆栈空间中运行。 OP的代码自然就变成了这样的形式。 -- 重点在于使用 Peano 算术。
标签: scheme