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`循环内部嵌套`if`和`else`语句,以及它们在创建列表推导式(List Comprehension)和控制循环流程中的作用。 首先,让我们关注`for`循环和`if`语句的组合,即列表推导式。列表推导式提供了...
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语句:判断用户输入的数字。*/set serveroutput on –接收键盘输入accept num prompt ‘请输入一个数字:’; declare –将屏幕输入的数字付给变量 pnum number := #begin if pnum = 0 then dbms_...
IF判断语句和FOR循环语句的搭配使用.xlsm
1. **条件语句的理解**:在编程语言中,IF条件语句是控制流程的一种基本结构,它允许程序根据特定条件的真假执行不同的代码块。IF通常与ELSE搭配使用,形成IF-ELSE结构,使得程序可以根据条件的真假执行两种不同的...
总的来说,计算整数绝对值是编程中常见的任务,我们可以使用if语句或者其他控制流结构来实现。在选择方法时,应考虑到代码的可读性、效率以及语言特性。在实际开发中,根据具体情况选择最适合的方法。
用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,添加这些...
在编程领域,`if`语句是控制流程的基础构建块之...`if`语句是任何编程语言中不可或缺的一部分,掌握其用法对于成为一名合格的程序员至关重要。希望这些练习能够帮助你更加熟练地使用`if`语句,进一步提升你的编程技能。
在这个实验中,我们主要探讨了Java中的三种条件语句和分支语句:`if...else`语句、嵌套`if`语句以及`switch`语句。 1. **`if...else`语句**: `if...else`语句是最基础的条件判断,它基于一个布尔表达式的值来决定...
### if条件语句 在编程语言中,`if` 条件语句是最基本的控制结构之一,用于根据条件执行不同的代码块。...- 通过这些示例,我们可以更深入地理解`if` 和 `switch` 的用法以及它们如何在JavaScript程序中发挥作用。
本篇文章主要关注的是条件语句(如if-else)和循环语句(如while)在编译原理中的处理方法。 首先,我们从词法分析开始。词法分析器负责识别源代码中的关键字、标识符、操作符和常量等基本元素。在条件语句和while...