编程真是蕴藏着无穷的想象,好的程序员就像艺术家一样雕刻他的代码,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:
int
sum_square_largest(
int
x,
int
y,
int
z){
if
(y
>
x
&&
z
>
x){
return
y
*
y
+
z
*
z;
}
if (x > y && z > y){ return x * x + z * z;
}
if (x > z && y > z){ return x * x + y * y;
}
}
}
if (x > y && z > y){ return x * x + z * z;
}
if (x > z && y > z){ return x * x + y * y;
}
}
但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就是:
int
sum_square_largest(
int
x,
int
y,
int
z){
if
(x
<=
y
&&
x
<=
z){
return
y
*
y
+
z
*
z;
}
return sum_square_largest(y, z, x);
}
}
return sum_square_largest(y, z, x);
}
这段代码符合Joe对判断一件作品是否是艺术的四个标准:
-
这段代码非人不能写出,富于想象力。
-
这段代码除了实现既定功能外,具有高度的表现力。
-
这段代码很美。
-
这段代码传递的美感和思想超越了它自身。
Joe Garvin给出了另外一个解法,不过没有Marshall的直观漂亮:
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![ExpandedBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
真是巧思,是不是艺术品,由君思考。
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7406370/viewspace-915908/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7406370/viewspace-915908/