漂亮代码
http://blog.csdn.net/g9yuayon/article/details/1611451
从 Joe Marshall论证编程是艺术的文章上看到的。编程到底是不是艺术已经快变成继编程语言和Emacs vs Vi之后另一Flame War话题。有兴趣的可以去看reddit的讨论。有意思的是一段漂亮的代码,实现SICP上一坨练习题1.3:
实现一个带三个参数的函数。这个函数返回三个参数中最大的两个参数的平方和。
题目用来训练学生对条件分支的理解。常规的解法是(迎合一下各位老大,改成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; } }
但Joe老大给出了一个非常漂亮的解法。简洁直观,巧妙地利用递归大幅简化判断。
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); }
这段代码符合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; }
坚持要上Scheme的老大们,这里是原文里的代码:
(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))))) (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)))) (define (sls x y z) (cond ((> z x) (sls z y x)) ((> z y) (sls x z y)) (else (+ (* x x) (* y y)))))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述