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、while语句转换为四元式" 本设计报告的目的是设计一个语法制导翻译器,将算术表达式、for语句、while语句翻译成四元式。下面是设计思路和算法流程: 一、设计目标 设计一个...
C语言中分支结构:if语句、if-else语句和switch语句的使用方法 C语言中分支结构是一种非常基本但非常重要的编程结构,它允许程序根据条件执行不同的代码块。在C语言中,分支结构有三种基本类型:if语句、if-else...
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`...
IF判断语句和FOR循环语句的搭配使用.xlsm
1. **条件语句的理解**:在编程语言中,IF条件语句是控制流程的一种基本结构,它允许程序根据特定条件的真假执行不同的代码块。IF通常与ELSE搭配使用,形成IF-ELSE结构,使得程序可以根据条件的真假执行两种不同的...
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分析法和四元式表示。对于学习编译器设计的同学来说,...
在程序设计语言中,`if_else`语句是一种基本的控制结构,用于根据条件的不同来选择执行不同的代码块。它允许程序员根据特定的条件来决定程序的执行路径。`if_else`语句由`if`、`else if`(可选)和`else`(可选)三...
if单分支语句 目录 课程导入 掌握if单分支结构的语法 掌握if单分支结构的使用 什么情况下使用if单分支结构 问题: 如果圆半径大于等于0,计算圆的面积。 如果小明的Java考试成绩大于95分,就能获得一张积分卡作为...
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,添加这些...
在这个实验中,我们主要探讨了Java中的三种条件语句和分支语句:`if...else`语句、嵌套`if`语句以及`switch`语句。 1. **`if...else`语句**: `if...else`语句是最基础的条件判断,它基于一个布尔表达式的值来决定...