foo(x Y)是一个必须解决这个问题的程序 Picture. 这是我的计划代码:
(define foo
(lambda (x y)
(if (<= y 0) (x) 0)
(if (<= x 0) (y) 0)
(if (>= x y) (+ x foo ((- x 1) (- y 2))) 0)
(if (< x y) (+ y foo ((- x 2) (- y 3))) 0)))
当它测试它时(foo 5 6)=&gt;它打印相同的确切数字,而不是12!我不知道为什么它没有通过递归电话..
答案 0 :(得分:3)
此处没有递归调用。要成为一个电话,你需要在它周围加上括号,如(foo (- x 2) (- y 3))
只有最后if
被视为该程序的结果。之前的所有值都返回一个值,因为它不是最后一个值,它会丢弃结果并继续下一个值。为了使几个条件意味着它们必须嵌套。因此,而不是0,你把整个下一个if
。
(define (foo x y)
(if (<= x 0)
x
(if (<= y 0)
y
...)))
还有cond
使得更平坦的结构在其他语言中用作if-elseif-else
。
(define (foo x y)
(cond
((<= x 0) x)
((<= y 0) y)
...
(else ...)))