2012-03-10 4 views
2

프롬프트는 두 개의 가장 큰 세 숫자의 제곱의 합을 반환하는 프로 시저를 정의하는 것입니다.SICP (운동 1.3)에서 시작 운동의 오류

나는이 정확하게 우아한 해결책 아니라는 것을 알고 있지만, 내가 함께 해킹 것입니다 : 나는 오류를 받고 있어요 왜

(define (largest-of-two-sum-of-squares x y z) 
     (cond ((and (< x y) (< x z)) (sum-of-squares y z)) 
       ((and (< y z) (< y x)) (sum-of-squares x z)) 
       ((and (< z x) (< z y)) (sum-of-squares x y))))) 

은 내가 궁금하네요 것은.

;The object 85 is not applicable 

개체 개체 뒤에 나오는 숫자는 항상 정답 인 btw입니다. 나는 계획 초급자이다, 그것은 나의 통어론 안에 무언가이어야 하는가?

감사 sindikat으로

+1

하나의 초과 닫기 대괄호가 있습니다. –

+2

6 6 6을 입력으로 어떻게합니까? :-) – 6502

답변

1

는 초과 닫는 브래킷을 지적했다. 미안합니다.

(define (sum-max a b c) 
    (define (sum x y) 
    (+ (* x x) (* y y))) 
    (if (>= a b) 
     (if (>= b c) 
      (sum a b) 
      (sum a c)) 
     (if (>= a c) 
      (sum b a) 
      (sum b c)))) 
+0

질문을 닫으려면 올바른 답을 표시하십시오 :) –

+1

세 숫자가 같으면 숫자가 같으면 실패합니다. –

+2

@ ÓscarLópez : 또는 두 개가 같고 다른 숫자보다 낮 으면 – 6502

3

여기에 또 다른 가능한 솔루션이 하나도 모두 세 개의 숫자가 같거나 두 개의 다른 같 낮은 경우있는 경우에 작동입니까?

+2

왜 하향 전화입니까? 내 솔루션은 정확하고, 그는 OP는 이미 자신의 코드에서 문제를 발견, 난 그냥 다른 대안을 가리키고있다. –

1

무엇

(define (largest-of-two-sum-of-squares x y z) 
    (+ (square x) (square y) (square z) 
     (- (square (min x y z))))) 

에 대해 :

+0

위의 해결 방법은 물론 정확하지만 SICP 책에서 운동 1.3이 명시된 요점을 감안할 때 독자는 아직 '최소'절차에 대해 "알지 못하는"것으로 간주되지 않습니다. 조건식 만 허용됩니다. –