编程真是蕴藏着无穷的想象,好的程序员就像艺术家一样雕刻他的代码,keyboard就是罗丹手中的小刀,一行行的代码就是陈列着的雕像。
编程到底是不是艺术已经快变成继编程语言和Emacs vs Vi之后另一Flame War话题。有兴趣的可以去看reddit的讨论。且看Joe Marshall论证编程是艺术的文章上一段代码。
实现一个带三个参数的函数。这个函数返回三个参数中最大的两个参数的平方和。
题目用来训练学生对条件分支的理解。常规的解法是
(define (sum-square-largest x y z)
(cond ((and (> y x) (> z x)) ;; y and z are largest
(+ (* y y) (* z z)))
((and (> x y) (> z y)) ;; x and z are largest
(+ (* x x) (* z z)))
((and (> x z) (> y z)) ;; x and y are largest
(+ (* x x) (* y y)))))改成C:
但Joe老大给出了一个非常漂亮的解法。简洁直观,巧妙地利用递归大幅简化判断。
define (sum-square-largest x y z)
(cond ((and (< x y) (< x z)) ;; x is smallest
(+ (* y y) (* z z)))
(else (sum-square-largest y z x))))
改成c就是:
这段代码符合Joe对判断一件作品是否是艺术的四个标准:
Joe Garvin给出了另外一个解法,不过没有Marshall的直观漂亮:

int sum_square_largest(int x, int y, int z)...{
if(x <= z) return sum_square_largest(z, y, x);
if(y <= z) return sum_square_largest(x, z, y); 
return x * x + y * y;
}真是巧思,是不是艺术品,由君思考。
[@more@]来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7406370/viewspace-915908/ ,如需转载,请注明出处,否则将追究法律责任。