ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

scheme代码返回3个数中较大2个数之和

2022-05-12 12:02:53  阅读:159  来源: 互联网

标签:两个 个数 代码 较大 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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有