标签:两个 个数 代码 较大 cond scheme bigger define
这是SICP的一道练习题(题号1.3)
定义一个过程,它以三个数为参数,返回其中较大的两个数之和。
首先,联想决策树模型:
x < y / \ / \ / \ x < z y < z / \ / \ / \ / \ x < y x < y y < x y < x x < z z < x y < z z < y
第一种方法:用 if 语句大概这么理解
(if (> x y) ; x 较大 (if (> y z) ; x 和 y 较大 ; x 和 z 较大) ; y 较大 (if (> x z) ; y 和 x 较大 ; y 和 z 较大))
具体代码:
(define (b1 x y z) (if (> x y) (if (> y z) (+ x y) (+ x z)) (if (> z x) (+ y z) (+ y x))))
第二种方法: 用 cond 语句
(cond ((and (> x y) (> y z)) ; x 和 y 较大) ((and (> x y) (> z y)) ; x 和 z 较大) ((and (> y x) (> x z)) ; y 和 x 较大) ((and (> y x) (> z x)) ; y 和 z 较大))
具体代码:
(define (b3 x y z) (cond ((and (> x y) (> y z)) (+ x y)) ((and (> x y) (> z y)) (+ x z)) ((and (> y z) (> z x)) (+ y z))))
第三种方法,也是需要熟悉的,用两个更小的函数bigger 和 smaller,来对两个参数求出较大和较小的。
具体思路:两个中较大的肯定算一个数,两个中较小的数和另外一个数比较出较大的来,这两个数就是题目要的。
具体代码:
(define (b3 x y z) (+ (bigger x y) (bigger (smaller x y) z)))
总结:这个题并不难,之所以写出来,是因为第一,第二中方法的逐步分类并排除的思路,是很重要很基础的。第三种再次拆分为更小的函数去解决问题的思维也是重要的。
本来学习Lisp类语言就是为了掌握编程的思维。
标签:两个,个数,代码,较大,cond,scheme,bigger,define 来源: https://www.cnblogs.com/litifeng/p/16261850.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。