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是全部过滤好之后再计算,算法不同结果也就不同了。
分享到:
相关推荐
51单片机-C语言for语句do...while语句if...else...语句产生随机数rand()常用基本语句例程源码 do...while语句 for语句 if...else...语句 switch-case-break语句 while与do...while区别 while语句 不同类型数据的差异...
本篇文章将深入探讨C语言中的if语句和switch语句,这两种选择结构是控制程序流程的重要工具,使得代码可以根据不同的条件执行不同的操作。 首先,我们来详细了解一下if语句。if语句是基于条件执行特定代码块的基础...
最新单片机仿真 用for语句控制蜂鸣器鸣笛次数最新单片机仿真 用for语句控制蜂鸣器鸣笛次数最新单片机仿真 用for语句控制蜂鸣器鸣笛次数最新单片机仿真 用for语句控制蜂鸣器鸣笛次数最新单片机仿真 用for语句控制蜂鸣...
在C语言中,if语句的基本结构是:if (满足某个条件) {执行某个动作}。 第二部分:if语句的功能模型 if语句的功能模型是:如果满足某个条件,就执行某个动作。这种模型可以用来实现各种逻辑判断和控制流程。 第三...
"编译原理课程设计——算术表达式、for、while语句转换为四元式" 本设计报告的目的是设计一个语法制导翻译器,将算术表达式、for语句、while语句翻译成四元式。下面是设计思路和算法流程: 一、设计目标 设计一个...
C语言中if-else语句的嵌套分析 C语言中if-else语句的嵌套分析是编程语言中一个重要的基础知识点。本文将对if-else语句的嵌套关系进行详细的分析和解释,包括if-else语句的基本概念、if-else语句的嵌套关系、if-else...
288-用for语句控制蜂鸣器鸣笛次数(51单片机C语言实例Proteus仿真和代码)288-用for语句控制蜂鸣器鸣笛次数(51单片机C语言实例Proteus仿真和代码)288-用for语句控制蜂鸣器鸣笛次数(51单片机C语言实例Proteus仿真和代码...
需要注意的是,这种方式只适用于函数没有副作用的情况,因为如果函数有副作用,则可能不会按照预期的方式运行。 #### 三、组合条件判断 在某些情况下,可以将多个条件组合在一起进行判断,从而避免嵌套过多的`if`...
"C语言中for语句的教学设计" For语句的基本概念 在C语言中,For语句是一种常用的循环语句,用于重复执行一段代码。For语句的基本格式为: for (初始化表达式; 条件表达式; 更新表达式) { 代码块 } 其中,初始化...
IF判断语句和FOR循环语句的搭配使用.xlsm
1. **条件语句的理解**:在编程语言中,IF条件语句是控制流程的一种基本结构,它允许程序根据特定条件的真假执行不同的代码块。IF通常与ELSE搭配使用,形成IF-ELSE结构,使得程序可以根据条件的真假执行两种不同的...
总的来说,计算整数绝对值是编程中常见的任务,我们可以使用if语句或者其他控制流结构来实现。在选择方法时,应考虑到代码的可读性、效率以及语言特性。在实际开发中,根据具体情况选择最适合的方法。
Python的语法糖非常强大,比如Python中在for循环中嵌套使用if和else语句的技巧便十分给力,下面我们就举几个例子来看详细的用法: for…[if]…构建List (List comprehension) 1.简单的for…[if]…语句 Python中,for...
用C语言编译FOR语句,固定句型的编译。程序初学者,欢迎大家指正
注:if一般只对其后紧跟的语句起作用,如果需要执行其他代码,需要添加代码块。 也就是这样: if 条件表达式: 代码块(代码块前的一般用tab缩进) if-else语句: if 条件表达式: 代码块 else: 代码块 ...
在C语言中,有三种主要的循环语句:for、while和do-while。在这三种循环中,for语句被认为是最灵活的,因为它既适用于已知循环次数的情况,也适用于循环次数未知但能提供循环继续条件的情况。 5.1 循环语句概述 ...
在编译原理中,我们经常会遇到各种控制流程语句,其中for循环语句是程序设计中最为常见的一种。本文将深入探讨for循环语句在编译过程中的翻译方法,特别是结合LR分析法和四元式表示。对于学习编译器设计的同学来说,...
FOR循环语句的翻译程序设计FOR循环语句的翻译程序设计FOR循环语句的翻译程序设计FOR循环语句的翻译程序设计FOR循环语句的翻译程序设计FOR循环语句的翻译程序设计FOR循环语句的翻译程序设计FOR循环语句的翻译程序设计...
根据提供的文档信息,我们可以深入探讨FOR循环语句的翻译程序设计,特别关注LL(1)分析方法以及如何生成四元式表示的中间代码。 ### 1. 系统描述 #### 1.1 问题描述 该课程设计的目标是设计、实现并调试一个能够...
它由一种非常简洁的语法构成,没有包括高级的控制结构,如条件语句(if...else)和循环(repeat...until, for)。然而,为了使语言更加实用和灵活,我们可以对其进行扩展,比如将PL/0语言升级到PL/1或PL/2,添加这些...