zoukankan      html  css  js  c++  java
  • 漂亮代码

    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)))))
  • 相关阅读:
    一维数组的 K-Means 聚类算法理解
    c#计算2个字符串的相似度
    一个人开发的html整站源码分享网站就这么上线了
    html页面显示服务器时间
    禁用浏览器自动填充表单解决办法
    布隆过滤器
    (转)二进制与三进制趣题
    随机算法_模拟退火算法
    NAT穿越
    (转)为什么所有浏览器的userAgent都带Mozilla
  • 原文地址:https://www.cnblogs.com/code-style/p/3418341.html
Copyright © 2011-2022 走看看