2008-10-30 61 views
3

我寫了這個計劃的代碼來計算二次方程的一個解決方案X2 + B X + C = 0使用Scheme代碼求解二次方程?

(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

沒有限制(原則上)這種嵌套的深度,並表達了Lisp解釋可以評估的整體複雜性。這是我們人類誰得到的還是比較簡單的表達式,如

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

其解釋會容易混淆評價是57.我們可以通過形式

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

寫這樣的表達幫助我們自己遵循一種被稱爲漂亮打印的格式化約定,其中每個長組合被寫入以便操作數垂直對齊。由此產生的縮進清楚地顯示了表達式的結構。

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))))