3

二次方程式 a x2 + b x + c = 0の 1 つの解を計算するために、このスキーム コードを書きました。

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

しかし、この手順はわかりにくいと誰かが私に言った。なんで?

この手順のクリーンアップ バージョンはどのようになりますか? 新しい手順の方が理解しやすい理由を教えてください。

ありがとう

4

2 に答える 2

7

理由の 1 つは、すべてが 1 行にまとめられていることです。pretty-printingと呼ばれるものを使用して読みやすくすることができます。複数の行に分割し、空白を使用します。

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

pretty-printingとして知られるフォーマット規則に従います。この規則では、オペランドが垂直方向に整列するように各長い組み合わせが書き込まれます。結果のインデントは、式の構造を明確に示しています。

于 2008-10-30T05:30:24.977 に答える
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))))
于 2008-10-30T05:32:25.440 に答える