Scala中的for(... if(...)){}和for(...) if(...){}语句是否是等价的呢?由于for语句的内部实现机制,决定了它们不是等价的。
例1:
scala> def compress[T](l : List[T]): List[T] = {
| var r = List(l.first)
| for(x <- l) if (x != r.last) r = r ::: List(x)
| r
| }
compress: [T](List[T])List[T]
scala> compress(List('a, 'a, 'a, 'a, 'b, 'c, 'c, 'a, 'a, 'd, 'e, 'e,
| 'e, 'e))
res0: List[Symbol] = List('a, 'b, 'c, 'a, 'd, 'e)
例2:
scala> def compress[T](l : List[T]): List[T] = {
| var r = List(l.first)
| for(x <- l if (x != r.last)) r = r ::: List(x)
| r
| }
compress: [T](List[T])List[T]
scala> compress(List('a, 'a, 'a, 'a, 'b, 'c, 'c, 'a, 'a, 'd, 'e, 'e, 'e, 'e)
| )
res1: List[Symbol] = List('a, 'b, 'c, 'c, 'd, 'e, 'e, 'e, 'e)
上述例1得到了正确的结果,而例2却得到了不同的结果,那是为什么呢?那是由于例1的for语句被解释为
l.foreach{x => if(x != r.last) r = r ::: List(x) }
例2的for语句则被解释为
l.filter(x => x != r.last).foreach{x => r = r ::: List(x)}
例1中的x != r.last语句中的r每次迭代时都不同,而例2中由于用了filter语句,所以过滤时使用的是同一r的实例,也就是例1是边过滤边计算,而例2是全部过滤好之后再计算,算法不同结果也就不同了。
分享到:
相关推荐
最新单片机仿真 用for语句控制蜂鸣器鸣笛次数最新单片机仿真 用for语句控制蜂鸣器鸣笛次数最新单片机仿真 用for语句控制蜂鸣器鸣笛次数最新单片机仿真 用for语句控制蜂鸣器鸣笛次数最新单片机仿真 用for语句控制蜂鸣...
51单片机-C语言for语句do...while语句if...else...语句产生随机数rand()常用基本语句例程源码 do...while语句 for语句 if...else...语句 switch-case-break语句 while与do...while区别 while语句 不同类型数据的差异...
python基础教程:Python中在for循环中嵌套使⽤if和else语句的技巧 Python的语法糖⾮常强⼤,⽐如Python中在for循环中嵌套使⽤if和else语句的技巧便⼗分给⼒,下⾯我们就举⼏个例⼦来看详细的⽤法: for…[if]…构建List...
1、.了解C语言的逻辑运算2、.学会使用if语句和switch语句3、.熟练掌握选择结构程序设计方法
编译原理课设的for语句递归下降法,用c++写的 比较好懂
288-用for语句控制蜂鸣器鸣笛次数(51单片机C语言实例Proteus仿真和代码)288-用for语句控制蜂鸣器鸣笛次数(51单片机C语言实例Proteus仿真和代码)288-用for语句控制蜂鸣器鸣笛次数(51单片机C语言实例Proteus仿真和代码...
代码如下:/*If语句:判断用户输入的数字。*/set serveroutput on –接收键盘输入accept num prompt ‘请输入一个数字:’; declare –将屏幕输入的数字付给变量 pnum number := #begin if pnum = 0 then dbms_...
IF判断语句和FOR循环语句的搭配使用.xlsm
C语言if语句教学设计.pdf
控制语句-if语句 if语句 1、if语句语法结构 if (条件){ 条件为true时执行的代码块 } 2、示例 if (age){ people = “未成年”; } if...else语句 1、if…else语法结构 if (条件) { 当条件为 true 时执行的代码块 }...
Python的语法糖非常强大,比如Python中在for循环中嵌套使用if和else语句的技巧便十分给力,下面我们就举几个例子来看详细的用法: for…[if]…构建List (List comprehension) 1.简单的for…[if]…语句 Python中,for...
用C语言编译FOR语句,固定句型的编译。程序初学者,欢迎大家指正
注:if一般只对其后紧跟的语句起作用,如果需要执行其他代码,需要添加代码块。 也就是这样: if 条件表达式: 代码块(代码块前的一般用tab缩进) if-else语句: if 条件表达式: 代码块 else: 代码块 ...
if单分支语句 目录 课程导入 掌握if单分支结构的语法 掌握if单分支结构的使用 什么情况下使用if单分支结构 问题: 如果圆半径大于等于0,计算圆的面积。 如果小明的Java考试成绩大于95分,就能获得一张积分卡作为...
Python中,for…[if]…语句一种简洁的构建List的方法,从for给定的List中选择出满足if条件的元素组成新的List,其中if是可以省略的。下面举几个简单的例子进行说明。 >>> a=[12, 3, 4, 6, 7, 13, 21] >>> newList =...
python 中循环语句及if语句的简单练习和答案.pdf
这是一道经典题目,用for语句来循环的求是3的倍数之和。
编译原理课程设计——算术表达式、for、while语句转换为四元式.pdf
FOR循环语句的翻译程序设计FOR循环语句的翻译程序设计FOR循环语句的翻译程序设计FOR循环语句的翻译程序设计FOR循环语句的翻译程序设计FOR循环语句的翻译程序设计FOR循环语句的翻译程序设计FOR循环语句的翻译程序设计...
if语句 if语句语法结构 if语句示例解析 条件表达式 1.标准if条件语句的语法 if expression: if suite else: else_ suite 如果表达式的值非0或者为布尔值True,则代码组if_ suite被执行;否则就去执行else_ suite ...