我写了这个方案代码来计算二次方程的一个解 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)))
然而,有人告诉我这个程序很难理解。为什么呢?
此程序的清理版本会是什么样的? 请让我知道为什么新程序会更容易理解。
由于
答案 0 :(得分:7)
嗯,原因之一是它全部都在一条线上。您可以使用名为漂亮打印的内容使其更具可读性,您可以将其分解为多行并使用空格:
(define (solve-quadratic-equation a b c)
(define disc (sqrt (- (* b b)
(* 4.0 a c))))
(/ (+ (- b) disc)
(* 2.0 a)))
通过这种方式,您可以更清楚地看到表达式的结构。
以下是SICP的引用:
对于这种嵌套的深度以及Lisp解释器可以评估的表达式的整体复杂性,没有(原则上)限制。我们人类会因为相对简单的表达方式而感到困惑,例如
解释器很容易评估为57.我们可以通过以表格形式写出这样的表达来帮助自己(+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6))
(+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6))
遵循称为漂亮打印的格式约定,其中写入每个长组合,以便操作数垂直对齐。由此产生的缩进清楚地显示了表达式的结构。
答案 1 :(得分:1)
是不是计划开发语言来解决问题?我承认我不知道多少计划,但我会添加一些缩进并添加一个正方形definelike。
(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))))