2017-01-25 7 views
-1

다음 구성표 기능이 결과를 인쇄하지 않는 이유를 말해주십시오. DrRacket을 사용하고 있습니다.구성표 기능이 인쇄되지 않습니다.

#lang sicp 

(define (sqr x) (* x x)) 

(define (sum_of_greatest_squares a b c) 
    (if(> a b) 
     (if(> a c) 
      (if(> b c) 
        ((+ (sqr a) (sqr c))(+ (sqr a) (sqr b)))) 
      (+ (sqr a) (sqr c)) 
     ) 
     (if(> b c) 
      (if (> a c) 
        ((+ (sqr a) (sqr b))(+ (sqr b) (sqr c))) 
      (+ (sqr c) (sqr b)))) 
     )) 
(sum_of_greatest_squares 3 4 5) 
+0

아무데도 인쇄하지 않습니다. –

+1

http://stackoverflow.com/help/mcve – naomik

답변

1

당신이 배우는 데있어 세부 지향적이지 않은 것을 알기 쉽게 설명합니다. 귀하의 코드에는 수많은 실수가 포함되어 있으며 다른 언어의 습관을 학습 계획에 반영 할 수 있습니다. DrRacket은 프로그램에 구문 오류가 있다는 것을 명확하게 보여 주므로 시작할 때 좋은 곳입니다. 내가 굵은 글씨로했다

섹션은 코드의 서식 불량 인 else 표현

(define (sum_of_greatest_squares a b c) 
    (if(> a b) 
     (if(> a c) 
      (if(> b c) ((+ (sqr a) (sqr c))(+ (sqr a) (sqr b)))) 
      (+ (sqr a) (sqr c)) 
     ) 
     (if(> b c) 
      (if (> a c) ((+ (sqr a) (sqr b))(+ (sqr b) (sqr c))) 
      (+ (sqr c) (sqr b)))) 
     )) 

누락 때문에 실수가 만들어진 곳 어렵게 볼 수 있습니다. 를 따라 이동

, 여기에 당신이 어떤 언어로 할 수처럼 당신이 원하는 목적지 당신은 단지 () 넣지 수있는 또 다른 큰 실수

((+ (sqr a) (sqr c))(+ (sqr a) (sqr b))) 

입니다. ()은 Lisp/Scheme/Racket에서 프로 시저 응용 프로그램으로 사용됩니다. 말도 안돼 -

위의 라인이

((+ (sqr 1) (sqr 3))(+ (sqr 1) (sqr 2))) 
((+ 1  9  )(+ 1  4  )) 
(10         5) 

마지막 줄은 "숫자 10 숫자 5를 적용"라고 (10 5) 인에 해당하는 것, a = 1, b = 2c = 3 말.

나중에 코드에서 실수를 반복합니다. 먼저이 문제를 수정하고 질문을 업데이트하십시오.

ps : sum_of_greatest_squares과 같은 snake_case 이름은 사용하지 마십시오. 일반적으로 스키마 작성자는이를 sum-of-greatest-squares으로 지정합니다.


어쨌든 어떤 절차를 수행해야할지 명확하지 않습니다. 내 으로 추정되며 두 개의 가장 큰 입력을 제곱 한 다음 합산 한 것입니다.

당신 함께 계산을 수행 할 수있는 두 개의 인수를 결정 if 표현의 거대한 계층 구조를 할 수 ...하지만 또 다른 방법은 항상 결과를 계산하기 위해 같은 두 개의 인수를 사용하는 것입니다,하지만에 if 식을 사용하여 적절한 인수를 올바른 위치로 이동하십시오.

(define (sqr x) (* x x)) 

(define (sum-of-greatest-squares a b c) 
    (cond ((< a b) (sum-of-greatest-squares b c a)) 
     ((< b c) (sum-of-greatest-squares a c b)) 
     (else (+ (sqr a) (sqr b))))) 

이 항상 두 개의 큰 숫자의 제곱의 합계 것이다 절차 측면의 대안으로 이것을 고려하지만, 훨씬 깨끗한 방법으로 그렇게


마지막으로, 요 르그 실제로 어디에도 아무 것도 인쇄하지 않는다고 언급합니다. DrRacket이 귀하의 프로그램 결과를 Interactions 창에 표시하지 않는다는 것을 의미한다는 것을 알고 있습니다.그러나 명시 적으로 콘솔로 인쇄하려면 display* and print* procedures

+0

어쨌든 귀하의 질문은 기술적으로 명백한 구문 오류가 있으므로 SO에서 허용되지 않습니다. 내가 대답하려고 시도조차도 바보 같아. – naomik

+0

감사합니다. 괄호 때문에 작동하지 않았습니다. 이것이 제가하려고했던 것입니다. #lang SICP (정의 (SQR을 X) (* XX)) 는 (정의 (합계 오브 큰 제곱 ABC) (경우 (> AB) (경우 (> AC) (경우 (> BC) (+ (SQR a) (SQR의 b)) (+ (SQR a) (SQR c)) ) (+ (SQR a) (SQR 온도)) ) (경우 (> BC) ((> AC) (+ (SQR a) (SQR의 b)) (+ (SQR의 b) (SQR 온도))) (+ (SQR 온도) (SQR의 b))) )) (합계 경우 - 가장 큰 사각형 7 8 10) – spheroid

+1

@spheroid 당신은 2 레벨이면 3 단계의 비교를 할 수 있습니다. 'a'가'b'보다 크다면'a'는 두번째로 큰 것 중 하나입니다. 그러면 'b'와 'c'중 가장 큰 것을 취합니다. 'a'가'b'보다 작 으면'b'를 취하고'a'와'c' 중 가장 큰 것을 취합니다. – Sylwester