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语句是基于条件执行特定代码块的基础...
在C语言中,if语句的基本结构是:if (满足某个条件) {执行某个动作}。 第二部分:if语句的功能模型 if语句的功能模型是:如果满足某个条件,就执行某个动作。这种模型可以用来实现各种逻辑判断和控制流程。 第三...
本教程将深入探讨如何在`for`循环内部嵌套`if`和`else`语句,以及它们在创建列表推导式(List Comprehension)和控制循环流程中的作用。 首先,让我们关注`for`循环和`if`语句的组合,即列表推导式。列表推导式提供了...
C语言中分支结构:if语句、if-else语句和switch语句的使用方法 C语言中分支结构是一种非常基本但非常重要的编程结构,它允许程序根据条件执行不同的代码块。在C语言中,分支结构有三种基本类型:if语句、if-else...
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仿真和代码...
在这个特定的场景中,我们讨论的是在Delphi编程环境中使用IF和ELSE IF语句来处理公司销售中的优惠策略。 Delphi,基于Pascal语言,提供了一种强大而灵活的方式来编写条件控制语句,帮助开发者根据不同的条件执行不同...
代码如下:/*If语句:判断用户输入的数字。*/set serveroutput on –接收键盘输入accept num prompt ‘请输入一个数字:’; declare –将屏幕输入的数字付给变量 pnum number := #begin if pnum = 0 then dbms_...
需要注意的是,这种方式只适用于函数没有副作用的情况,因为如果函数有副作用,则可能不会按照预期的方式运行。 #### 三、组合条件判断 在某些情况下,可以将多个条件组合在一起进行判断,从而避免嵌套过多的`if`...
"C语言中for语句的教学设计" For语句的基本概念 在C语言中,For语句是一种常用的循环语句,用于重复执行一段代码。For语句的基本格式为: for (初始化表达式; 条件表达式; 更新表达式) { 代码块 } 其中,初始化...
IF判断语句和FOR循环语句的搭配使用.xlsm
1. **条件语句的理解**:在编程语言中,IF条件语句是控制流程的一种基本结构,它允许程序根据特定条件的真假执行不同的代码块。IF通常与ELSE搭配使用,形成IF-ELSE结构,使得程序可以根据条件的真假执行两种不同的...
用C语言编译FOR语句,固定句型的编译。程序初学者,欢迎大家指正
注:if一般只对其后紧跟的语句起作用,如果需要执行其他代码,需要添加代码块。 也就是这样: if 条件表达式: 代码块(代码块前的一般用tab缩进) if-else语句: if 条件表达式: 代码块 else: 代码块 ...
本文将详细介绍C++中的`if`语句、决策语句块以及变量的作用域,并通过实例解释如何使用这些工具来控制程序的流程。 #### 二、C++中的决策结构 决策结构允许程序员根据特定条件的变化来控制程序的执行路径。在C++中...
在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 问题描述 该课程设计的目标是设计、实现并调试一个能够...