SICP读书笔记2---if和cond的区别
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的区别相关推荐
- 【“计算机科学与技术”专业小白成长系列】SICP 读书笔记: The Elements of Programming
SICP 读书笔记: The Elements of Programming 编程元素 强大的编程语言不仅仅是一种指示计算机执行任务的方法.语言也可以作为一个框架,我们可以在其中组织关于过程的想法.当 ...
- SICP读书笔记 2.5
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- SICP读书笔记 2.1
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- SICP读书笔记 3.1
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- SICP读书笔记 2.3
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- SICP读书笔记 3.5
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- SICP读书笔记(5) —— Sec1.1.2-Sec1.1.3
[b][size=medium]Sec1.1.2 命名和环境[/size][/b] 介绍第一种特殊形式:define,也就是把名字与计算对象进行绑定.需要注意的是,在Lisp中,在同一个作用域中不能使 ...
- Go语言实战读书笔记
2019独角兽企业重金招聘Python工程师标准>>> Go语言实战读书笔记 第二章 通道(channel).映射(map)和切片(slice)是引用类型.引用类型的对象需要使用ma ...
- SICP学习笔记(1.1.4~1.1.5)
SICP学习笔记(1.1.4~1.1.5) ...
最新文章
- 中国版 Ubuntu Kylin 14.04 LTS 麒麟操作系统中文版发布下载 (Ubuntu天朝定制版)
- 从Deepwalk到Node2vec
- Centos Another app is currently holding the yum lock
- 【VS开发】使用WinPcap编程(1)——获取网络设备信息
- 针对故障场景的血液,汗液和书写自动集成测试
- spring-security-学习笔记-03-spring-security快速上手
- table表格for循环绑定数据_.NET MVC 页面表格绘制
- $con=mysql_connect_php连接mysql mysql_connect()与mysqli_connect()的盲点
- ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效---解决方法
- JS中浅拷贝和深拷贝的使用,深拷贝实现方法总结
- 人工神经网络之Python 实战
- 【渝粤教育】国家开放大学2018年春季 7392-21TMatlab语言及其应用 参考试题
- 使用MySQL中的对象数组查询JSON列
- Android 自定义viewGroup实现淘宝二楼及处理多指触控事件
- 实体消歧(链接到实体库)
- 在线学习网站大全(推荐)
- 4668. 【NOIP2016提高A组模拟7.19】腐败
- Ubuntu下使用SCM Micro’s SDI011双界面读卡器驱动
- cocos2dx-lua v3 -sprit 精灵详解
- Java 自定义注解实现springMVC 参数校验非空判断,为空 则返回响应为空信息
热门文章
- 快速读论文----CKA----Similarity of Neural Network Representations Revisited
- 阿里巴巴年薪800k大数据全栈工程师成长记
- 只用200行Go代码写一个自己的区块链!
- 经典sql题目,给每个部门中工资最低的员工涨薪1000
- 沧小海笔记之基于xilinx的三速以太网相关知识的学习与理解
- CJBorderView 一种iOS开发中常用的虚线边框View------* An easy way to init a view with dotted line border
- pygame 播放音乐
- 软考一般什么时候出成绩呢?
- x82y 阿里滑块 解决方法!
- 即速应用——不会代码也能做App