1.比较形式上面的区别

(1)cond

(cond (<p1> <e1>)

(<p2> <e2>)

.......

(<pn> <en>))

或者

(cond (<p1> <e1>)

(<p2> <e2>)

.......

(else <en>))

(2)if

(if <predicate> <consequent> <alternative>)

2.实际应用上的不同(这里以DrRacket为IDE)

(1)最大的不同就是一个结果需要进行多个操作的时候

比如我判断n是否等于0

先换个行(newline)再(display)个什么东西。

这里算两条语句。如果使用if语句就不行。

而使用cond的话,在教学模式下是不行的,不过在选择语言模式下(比如使用#lang racket)就是可以的。

注:①其实你看1中的两种形式上的不同就可以知道,cond的每个情况都是用()括起来的,所以里面的e即使有几条,都是能够和下一个条件的p区分开的。

②当然还是有可以在if里面使用多条语句的办法,将想要执行的多个语句打包在(begin <e1> <e2> .....)这样使用即可。

不过这样使用终归没有cond方便。

③cond中,需要几个一起执行的语句是不需要单独用一个()括起来的,直接写就可以了。

比如:看上去也很清晰。

(define (start-test-3 begin counter)
    (define t1 (runtime))
    (cond ((= counter 0)
                 (newline)
                 (display "OK"))

((prime? begin)
                (report begin (- (runtime) t1))
                (start-test-3 (+ begin 2) (- counter 1)))

(else
              (start-test-3 (+ begin 2) counter))))

(2)#lang planet neil/sicp,if没有else的时候

这个环境是专门为sicp开发的

所以支持一些scheme有,但是racket不支持的语法。

比如

(define (test n)
  (if (= n 0)
      (display "OK")))

if语句没有给出else的情况。

(3)cond优点

个人感觉cond要比if好用很多。

比如在写一个迭代的时候,如果同时拥有计数结束,以及中间判断某条件的结束。

使用if的话就有点捉襟见肘,需要嵌套才可以。

比如:

(define (do-the-check n times)
  (cond ((= times n) true)                                                                               。。。。。。。。。。。。A
        ((= (expmod times n n) times) (do-the-check n (+ times 1)))       
        (else false))                                                                                             。。。。。。。。。。。。B

有AB两种可能使这个迭代结束。A是计数到达n。B是计算expmod不等于n。

使用cond可以很方便地实现这种情况。使用if怎么都需要嵌套很不方便。

SICP读书笔记2---if和cond的区别相关推荐

  1. 【“计算机科学与技术”专业小白成长系列】SICP 读书笔记: The Elements of Programming

    SICP 读书笔记: The Elements of Programming 编程元素 强大的编程语言不仅仅是一种指示计算机执行任务的方法.语言也可以作为一个框架,我们可以在其中组织关于过程的想法.当 ...

  2. SICP读书笔记 2.5

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  3. SICP读书笔记 2.1

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  4. SICP读书笔记 3.1

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  5. SICP读书笔记 2.3

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  6. SICP读书笔记 3.5

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  7. SICP读书笔记(5) —— Sec1.1.2-Sec1.1.3

    [b][size=medium]Sec1.1.2 命名和环境[/size][/b] 介绍第一种特殊形式:define,也就是把名字与计算对象进行绑定.需要注意的是,在Lisp中,在同一个作用域中不能使 ...

  8. Go语言实战读书笔记

    2019独角兽企业重金招聘Python工程师标准>>> Go语言实战读书笔记 第二章 通道(channel).映射(map)和切片(slice)是引用类型.引用类型的对象需要使用ma ...

  9. SICP学习笔记(1.1.4~1.1.5)

        SICP学习笔记(1.1.4~1.1.5)                                                                           ...

最新文章

  1. 201671030129 周婷 《英文文本统计分析》结对项目报告
  2. 后端工程师入门前端页面重构(二):心法 I
  3. linux修改网卡文件夹,CentOS7 修改网卡名称为eth0在VMWare中添加多网卡配置
  4. 每日一题:leetcode341.扁平化嵌套列表迭代器
  5. C#关于制作截图工具(一)简单截图
  6. mysql常见排错_mysql 一些排错技巧
  7. python编解码的字节与字符串相互转换
  8. 北京信息科技大学计算机科学与技术研究生,2020年北京信息科技大学计算机科学与技术考研经验分享...
  9. Django——jinja2配置与使用
  10. [转载]每天早晨含姜片含出三大奇迹/姜的二十种食疗功/生姜克
  11. 使用python-docx模块解析docx文档
  12. 中国银行软件中心信息技术岗(北京 )面试
  13. 湖北一考生将高考数学题上传小猿搜题事件网络舆情综合编报
  14. 【硬件深似海】磁珠选型规范
  15. 普渡大学计算机科学在美就业,优势背景助力美国普渡大学计算机科学CS本科申请!...
  16. 微信公众平台PHP开发(转载)
  17. Unity即将内置骨骼动画插件Anima2D
  18. 三菱PLC MC协议的配置和使用简析
  19. ECCV 2022 | 阿里提出:快速动作识别的时空自注意力模型
  20. JZOJ 3809 【NOIP2014模拟8.25】设备塔

热门文章

  1. SAP UI5 应用开发教程之八十一 - 采用 OPA5 进行 SAP UI5 集成测试(Integration Test)的一个例子试读版
  2. 将机械硬盘换成固态硬盘的装机过程
  3. 路由器自动ip服务器无响应,路由器无法自动分配IP地址原因及解决方法
  4. 维护采购订单审批的特性Characteristic和类Class
  5. pdf编辑软件哪个好
  6. 学3d游戏建模要用到什么软件
  7. Python基础实例——随机单词生成(仅单词)
  8. 2021年中式烹调师(中级)及中式烹调师(中级)模拟试题
  9. 如何解决CSDN写博客出现浏览器“不支持隐私模式,需用普通模式访问”的原因?
  10. mysql双主架构沈剑_58 沈剑 - 数据库架构师做什么-58同城数据库架构设计思路