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

我不确定我哪里出错了,从逻辑上讲,一些帮助会很好!

4

1 回答 1

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

代码忽略了(cdr array)部分(pair? )和部分(car array)
中的(else )

它应该是:

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

(*) 请注意,(pair? )已删除。

于 2010-01-09T09:01:02.757 回答