3

我编写了这个方案代码来计算二次方程 a x2 + b x + c = 0的一个解

(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

嗯,一个原因是它都在一条线上。你可以使用一种叫做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 回答