0 0

scala lazy的问题。5

初学scala,遇到一个lazy的问题。
scala> def repeat [T] (x : T) : List[T] = x :: (repeat (x))
scala> repeat (0) take (3)
结果堆栈溢出。
请问这个如何能处理为lazy的呢?

问题补充:邮件列表给出的答案是Stream类……
为什么scala不是默认lazy的呢……
FP 
2010年1月27日 11:31

2个答案 按时间排序 按投票排序

0 0

night_stalker 写道
val x = 12
lazy val repeat : List[Int] = x :: repeat

楼主要的不是那个意义上的lazy,而是跟Haskell一样的lazy evaluation,也就是说即便是无限表也有办法让某些运算能终结。

这样的话就应该自己写一个LazyList[T]类型,让它每到访问某个节点的时候才去计算其中的值。用内建的List[T]类型是做不到的,一对它求值它就会试图把整个表的值都先填上。

其实C#也能搞出类似效果的东西:
using System;
using System.Collections.Generic;
using System.Linq;

static class Program {
  static IEnumerable<T> Repeat<T>(T value) {
    while (true) {
      yield return value;
    }
  }
  
  static void Main(string[] args) {
    var repeat5 = Repeat(5);
    foreach (var n in repeat5.Take(3)) {
      Console.WriteLine(n);
    }
  }
}

也就是——作弊。
C#里的IEnumerable<T>就表示了一类lazy sequence,于是即便在这么一种strict evaluation order的语言里也照样可以无限repeat...

2010年1月29日 11:05
0 0

scala 中只有 val 才允许 lazy。所以不能用泛型。

val x = 12
lazy val repeat : List[Int] = x :: repeat


生搬 java 泛型真的很尴尬 …… 在 haskell 中很容易做的事情都变得很困难。

2010年1月29日 10:18

相关推荐

    Scala编程详解 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页.pptx

    在深入探讨Scala编程的各个层面时,我们重点关注函数、过程、lazy值和异常处理这些核心概念。 首先,函数是Scala编程的基础元素之一。函数可以用来封装可重用的代码块,并可能返回一个值。当我们定义一个函数,如果...

    scala零基础学习

    ### Scala基础学习知识点 #### 一、Scala简介 Scala是一种多范式的编程语言,它集成了面向对象编程和函数式编程的特点。...无论是初学者还是有经验的开发者,Scala都能提供一种新的编程视角,帮助解决实际问题。

    Scala 书籍资料

    此外,Scala还引入了惰性求值(Lazy Evaluation)和不可变数据结构,这些特性在函数式编程中非常重要,因为它们可以提高性能并保证状态的纯净。 在函数式编程方面,资料可能涵盖函数组合、柯里化(Currying)、高阶...

    Scala编程语言详解(从入门到精通)spark

    - **懒值**:Scala 支持懒加载(Lazy Evaluation),可以在需要时才计算某个表达式的值。 - **异常处理**:Scala 提供了与 Java 类似的异常处理机制。 #### 六、数据结构 - **主要的集合特质**:Scala 提供了丰富...

    scala 学习资料

    9. **延迟初始化**:Scala提供了延迟初始化(lazy)特性,确保一个变量只在首次使用时才被初始化,这对于节省资源和提高性能很有帮助。 10. **交互式编程**:Scala可以配合REPL(Read-Eval-Print Loop)进行交互式...

    Scala设计模式

    private lazy val component = new Component def getComponent(): Component = component } // 使用 val delayedComponent = new DelayedComponent() delayedComponent.getComponent() // 第一次调用时初始化 ...

    Spark技术实战之基础篇 -Scala语言从入门到精通 Scala编程详解 含课件和资料 共21个章节.rar

    函数入门之变长参数第8讲-Scala编程:函数入门之过程、lazy值和异常第9讲-Scala编程:数组操作之Array、ArrayBuffer以及遍历数组第10讲-Scala编程:数组操作之数组转换第11讲-Scala编程:Map与Tuple第12讲-Scala编程...

    Scala编程详解 第3讲-Scala编程详解:基础语法 共8页.pptx

    函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...

    Scala编程详解 第18讲-Scala编程详解:模式匹配 共11页.pptx

    函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...

    Scala编程详解 第5讲-Scala编程详解:函数入门 共5页.pptx

    函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...

    Scala编程详解 第16讲-Scala编程详解:函数式编程 共14页.pptx

    函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...

    Scala编程详解 第11讲-Scala编程详解:Map与Tuple 共8页.pptx

    函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...

    Scala编程详解 第15讲-Scala编程详解:面向对象编程之Trait 共14页.pptx

    函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...

    Scala编程详解 第10讲-Scala编程详解:数组操作之数组转换 共5页.pptx

    函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...

    Scala编程详解 第20讲-Scala编程详解:隐式转换与隐式参数 共9页.pptx

    函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...

    Scala编程详解 第17讲-Scala编程详解:函数式编程之集合操作 共9页.pptx

    函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...

    Scala编程详解 第7讲-Scala编程详解:函数入门之变长参数 共4页.pptx

    函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...

    A.Beginner's.Guide.to.Scala

    在函数式编程方面,Scala拥有强大的函数式编程能力,比如高阶函数(higher-order functions)、不可变性(immutability)、惰性求值(lazy evaluation)和强大的类型推断(type inference)。这些特性让Scala成为...

Global site tag (gtag.js) - Google Analytics