2008-10-30 3 views
3

Я написал эту схему код для вычисления одного решения квадратного уравнения а х2 + б х + с = 0Использование кода схемы для решения квадратного уравнения?

(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)))) 
Смежные вопросы