2010-01-09 4 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/ 참조)를 적용하는 데 절대적으로 도움이됩니다. 구체적으로 : 입력에 대한 데이터 정의는 무엇입니까? –

답변

3

나는 논리적 오류를 찾을 수 없습니다 않았다 :)
그것은 우리의 함수를 작성하기 전에 먼저 재귀 부분을 파악하는 것이 중요합니다.

multi-max

(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 출력 multi-max = max(multi-max(car), multi-max(cdr)) 재귀 적 정의 될 수있다.

편집 : 좋아, 내가 오류를 발견 한 것 같아요 :

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

관련 문제