2008-10-30 13 views
3

j'ai écrit ce code système pour calculer une solution de l'équation quadratique a x2 + b + c x = 0Utilisation du code de schéma pour résoudre une équation quadratique?

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

Cependant, quelqu'un m'a dit que cette procédure est difficile à comprendre. Pourquoi? A quoi ressemblerait une version nettoyée de cette procédure?

S'il vous plaît laissez-moi savoir pourquoi la nouvelle procédure serait plus facile à comprendre.

Merci

Répondre

7

Eh bien, une des raisons est qu'il est sur une seule ligne. Vous pouvez le rendre plus lisible en utilisant quelque chose appelé jolie impression, où vous cassez vers le haut en plusieurs lignes et d'utiliser des espaces:

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

De cette façon, vous pouvez voir plus clairement la structure des expressions.

Et voici une citation de SICP:

Il n'y a pas de limite (en principe) à la profondeur de cette imbrication et la complexité globale des expressions que l'interprète Lisp peut évaluer. Ce sont les hommes qui se confondre par des expressions encore relativement simples comme

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

que l'interprète évaluerait facilement être 57. Nous pouvons nous aider en écrivant une telle expression sous la forme

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

suivant une convention de formatage connue sous le nom jolie impression, dans lequel chaque longue combinaison est écrite de sorte que les opérandes sont alignés verticalement. Les indentations résultantes affichent clairement la structure de l'expression.

1

Est-ce que tout ne se résume pas à développer un langage pour résoudre un problème? J'avoue que je ne connais pas grand-chose, mais j'ajouterais un peu d'indentation et j'ajouterais une définition carrée.

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