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. 中国版 Ubuntu Kylin 14.04 LTS 麒麟操作系统中文版发布下载 (Ubuntu天朝定制版)
  2. 从Deepwalk到Node2vec
  3. Centos Another app is currently holding the yum lock
  4. 【VS开发】使用WinPcap编程(1)——获取网络设备信息
  5. 针对故障场景的血液,汗液和书写自动集成测试
  6. spring-security-学习笔记-03-spring-security快速上手
  7. table表格for循环绑定数据_.NET MVC 页面表格绘制
  8. $con=mysql_connect_php连接mysql mysql_connect()与mysqli_connect()的盲点
  9. ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效---解决方法
  10. JS中浅拷贝和深拷贝的使用,深拷贝实现方法总结
  11. 人工神经网络之Python 实战
  12. 【渝粤教育】国家开放大学2018年春季 7392-21TMatlab语言及其应用 参考试题
  13. 使用MySQL中的对象数组查询JSON列
  14. Android 自定义viewGroup实现淘宝二楼及处理多指触控事件
  15. 实体消歧(链接到实体库)
  16. 在线学习网站大全(推荐)
  17. 4668. 【NOIP2016提高A组模拟7.19】腐败
  18. Ubuntu下使用SCM Micro’s SDI011双界面读卡器驱动
  19. cocos2dx-lua v3 -sprit 精灵详解
  20. Java 自定义注解实现springMVC 参数校验非空判断,为空 则返回响应为空信息

热门文章

  1. 快速读论文----CKA----Similarity of Neural Network Representations Revisited
  2. 阿里巴巴年薪800k大数据全栈工程师成长记
  3. 只用200行Go代码写一个自己的区块链!
  4. 经典sql题目,给每个部门中工资最低的员工涨薪1000
  5. 沧小海笔记之基于xilinx的三速以太网相关知识的学习与理解
  6. CJBorderView 一种iOS开发中常用的虚线边框View------* An easy way to init a view with dotted line border
  7. pygame 播放音乐
  8. 软考一般什么时候出成绩呢?
  9. x82y 阿里滑块 解决方法!
  10. 即速应用——不会代码也能做App