2010-01-09 45 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