2010-01-09 44 views
1

我已经写了一个函数来从嵌套列表中获取最大值,我有右下角函数的一般形式;它适用于平面列表和嵌套列表,但在有兄弟嵌套列表时似乎失败。子列表上最大的方案

这里是我的代码:

(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

这个问题是绝对乞求设计食谱的应用(参见http://www.htdp.org/)。具体来说:您输入的数据定义是什么? – 2010-01-11 22:37:42

回答

3

我没找到逻辑错误,所以我在递归的方式改写了吧:)
它编写我们的功能之前,首先要识别递归部分是很重要的。

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)))) 
... 

代码忽略了(else )部分在(pair?)部分(cdr array)(car array)

它应该是:

(else (max (multi-max (car array)) (multi-max (cdr array)))) 

(*)注意:(pair? )被删除。

+0

Doh!多谢,伙计! – Ixmatus 2010-01-09 15:53:05