2008-10-30 4 views
3

나는 차 방정식의 하나 개의 솔루션을 계산하기 위해이 제도 코드를 쓴 X2 + B X + C = 0Scheme 코드를 사용하여 2 차 방정식을 푸십시오?

(define (solve-quadratic-equation a b c) (define disc (sqrt (- (* b b) (* 4.0 a c)))) (/ (+ (- b) disc) (* 2.0 a))) 

그러나, 누군가가이 절차가 이해하기 어려운 것을 저에게 말했다. 왜?

이 절차의 정리 된 버전은 어떻게됩니까? 새 절차를 이해하기가 더 쉬운 이유를 알려주십시오.

감사합니다.

답변

7

글쎄, 한 가지 이유가 있습니다. 좀 더 명확하게 표현의 구조를 볼 수 있습니다

(define (solve-quadratic-equation a b c) 
    (define disc (sqrt (- (* b b) 
         (* 4.0 a c)))) 
    (/ (+ (- b) disc) 
    (* 2.0 a))) 

이 방법 : 당신은 당신이 여러 줄로를 끊고 공백을 사용을 꽤 - 인쇄 라는 것을 사용하여 좀 더 읽기 쉽게 만들 수 있습니다.

그리고 여기가 SICP에서 견적입니다 :

는 중첩의 깊이와 리스프 인터프리터가 평가할 수있는 표현의 전반적인 복잡성 (원칙적으로) 제한이 없습니다. 그것은 우리가 양식

(+ (* 3 
     (+ (* 2 4) 
     (+ 3 5))) 
    (+ (- 10 7) 
     6))

이러한 식을 작성하여 자신을 도울 수 57 수와 같은 인터프리터가 쉽게 평가할 것

(+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6))

으로 여전히 상대적으로 간단한 표현 혼란을 얻을 우리 인간입니다 pretty-printing이라는 형식 규칙을 따르며 각 긴 조합은 피연산자가 세로로 정렬되도록 작성됩니다. 결과 들여 쓰기는 표현식의 구조를 명확하게 보여줍니다.

1

문제를 해결하기 위해 언어를 개발하는 것이 전부가 아닙니다. 나는 많은 계획을 알지 못한다는 것을 인정하지만, 나는 들여 쓰기를 추가하고 정사각형을 추가 할 것이다.

(define (solve-quadratic-equation a b c) 
    (define square (x) (* x x) 
    (define disc (sqrt (- (square b) (* 4.0 a c)))) 
         (/ (+ (- b) disc) (* 2.0 a)))) 
관련 문제