⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 course-2002-10.scala

📁 JAVA 语言的函数式编程扩展
💻 SCALA
字号:
//############################################################################// Programmation IV - 2002 - Week 10//############################################################################// $Id: Course-2002-10.scala 12560 2007-08-17 15:17:54Z michelou $import Math.{Pi, log}object M0 {  def addStream (s1: Stream[int], s2: Stream[int]): Stream[int] =    Stream.cons(s1.head + s2.head, addStream(s1.tail, s2.tail));  val fib: Stream[int] =    Stream.cons(0, Stream.cons(1, addStream(this.fib, this.fib.tail)));  def test = {    var i = 0;    fib.take(20).foreach(n => {Console.println("fib("+i+") = "+n); i=i+1});    Console.println;  }}//############################################################################object M1 {  def scale(x: double, s: Stream[double]): Stream[double] =    s map { e: double => e*x }  def partialSums(s: Stream[double]): Stream[double] =    Stream.cons(s.head, partialSums(s.tail) map (x => x + s.head));  def euler(s: Stream[double]): Stream[double] = {    val nm1 = s apply 0;    val n   = s apply 1;    val np1 = s apply 2;    Stream.cons(np1 - ((np1 - n)*(np1 - n) / (nm1 - 2*n + np1)),euler(s.tail))  };  def better(s: Stream[double], transform: Stream[double] => Stream[double])    : Stream[Stream[double]] =    Stream.cons(s, better(transform(s), transform));  def veryGood(s: Stream[double], transform: Stream[double] => Stream[double])    : Stream[double] =    better(s, transform) map (x => x.head);  def lnSummands(n: double): Stream[double] =    Stream.cons(1.0 / n, lnSummands(n + 1.0) map { x: double => -x })  var ln0 = partialSums(lnSummands(1.0));  var ln1 = euler(ln0);  var ln2 = veryGood(ln0, euler);  def piSummands(n: double): Stream[double] =    Stream.cons(1.0 / n, piSummands(n + 2.0) map { x: double => -x })  var pi0 = scale(4.0, partialSums(piSummands(1.0)));  var pi1 = euler(pi0);  var pi2 = veryGood(pi0, euler);  def pad(s: String, n: int): String =    if (n <= 0) s.substring(0, s.length() + n)    else pad(s + " ", n - 1);  def str(d: double) = { val s = d.toString(); pad(s, 18 - s.length()) };  def test = {    var i = 0;    while (i < 10) {      Console.print("pi("+i+") = ");      Console.print(str(pi0.apply(i)) + ", ");      Console.print(str(pi1.apply(i)) + ", ");      Console.print(str(pi2.apply(i)) + "\n");      i = i + 1;    }    Console.print("pi    = ");    Console.print(str(Pi) + ", ");    Console.print(str(Pi) + ", ");    Console.print(str(Pi) + "\n");    Console.println;    i = 0;    while (i < 10) {      Console.print("ln("+i+") = ");      Console.print(str(ln0.apply(i)) + ", ");      Console.print(str(ln1.apply(i)) + ", ");      Console.print(str(ln2.apply(i)) + "\n");      i = i + 1;    }    Console.print("ln    = ");    Console.print(str(log(2)) + ", ");    Console.print(str(log(2)) + ", ");    Console.print(str(log(2)) + "\n");    Console.println;  }}//############################################################################object M2 {  class IntIterator(start: int) extends Iterator[int] {    var current: int = start;    def hasNext = true;    def next = { current = current + 1; current - 1 };  }  class PrimeIterator() extends Iterator[int] {    var current: Iterator[int] = new IntIterator(2);    def hasNext = true;    def next = {      val p = current.next;      current = current filter { x => !((x % p) == 0) };      p    }  }  def test = {    val i = (new PrimeIterator()).take(30);    Console.print("prime numbers:");    while (i.hasNext) { Console.print(" " + i.next); }    Console.println;  }}//############################################################################object Test {  def main(args: Array[String]): Unit = {    M0.test;    M1.test;    M2.test;    ()  }}//############################################################################

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -