我编写了一个函数来从嵌套列表列表中获取最大值,我的函数的一般形式是右下角;它适用于平面列表和嵌套列表,但在有兄弟嵌套列表时似乎失败。
这是我的代码:
(define (multi-max array)
(cond
((null? array) 0)
((number? (car array))
(if (> (car array) (multi-max (cdr array)))
(car array)
(multi-max (cdr array))))
((pair? (car array))
(multi-max (car array)))
(else
(multi-max (cdr array)))))
以下是失败的测试列表:(multi-max '(1 9 83 9 (332 (334) (2 3 4224))))
我不确定我哪里出错了,从逻辑上讲,一些帮助会很好!
答案 0 :(得分:3)
我没有找到逻辑错误所以我用 more 递归方式重写了它:) 在编写函数之前首先识别递归部分很重要。
multi-max
可以递归定义为multi-max = max(multi-max(car), multi-max(cdr))
(define (multi-max array)
(cond ((pair? array) (max (multi-max (car array)) (multi-max (cdr array))))
((number? array) array)
(else 0)))
(multi-max '(1 9 83 9 (332 (334) (2 3 4224))))
现在输出4224
。
编辑:好的,我想我发现了错误:
...
((pair? (car array))
(multi-max (car array)))
(else
(multi-max (cdr array))))
...
代码会忽略(cdr array)
部分中的(pair? )
和(car array)
在(else )
部分。
应该是:
(else (max (multi-max (car array)) (multi-max (cdr array))))
(*)请注意(pair? )
已删除。