From df50e05006b43b007c2587549030d24b5c154398 Mon Sep 17 00:00:00 2001 From: Gilles Dubochet Date: Fri, 16 Dec 2005 18:29:42 +0000 Subject: 'test-nsc' has been moved to 'test'. --- test/files/run/Course-2002-10.scala | 136 ++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 test/files/run/Course-2002-10.scala (limited to 'test/files/run/Course-2002-10.scala') diff --git a/test/files/run/Course-2002-10.scala b/test/files/run/Course-2002-10.scala new file mode 100644 index 0000000000..e634309018 --- /dev/null +++ b/test/files/run/Course-2002-10.scala @@ -0,0 +1,136 @@ +//############################################################################ +// Programmation IV - 2002 - Week 10 +//############################################################################ +// $Id$ + +import java.lang.System; // to avoid name clash with .NET's library + +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 => {System.out.println("fib("+i+") = "+n); i=i+1}); + System.out.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 at 0; + val n = s at 1; + val np1 = s at 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) { + System.out.print("pi("+i+") = "); + System.out.print(str(pi0.at(i)) + ", "); + System.out.print(str(pi1.at(i)) + ", "); + System.out.print(str(pi2.at(i)) + "\n"); + i = i + 1; + } + System.out.print("pi = "); + System.out.print(str(Math.PI) + ", "); + System.out.print(str(Math.PI) + ", "); + System.out.print(str(Math.PI) + "\n"); + System.out.println(); + i = 0; + while (i < 10) { + System.out.print("ln("+i+") = "); + System.out.print(str(ln0.at(i)) + ", "); + System.out.print(str(ln1.at(i)) + ", "); + System.out.print(str(ln2.at(i)) + "\n"); + i = i + 1; + } + System.out.print("ln = "); + System.out.print(str(Math.log(2)) + ", "); + System.out.print(str(Math.log(2)) + ", "); + System.out.print(str(Math.log(2)) + "\n"); + System.out.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); + System.out.print("prime numbers:"); + while (i.hasNext) { System.out.print(" " + i.next); } + System.out.println(); + } +} + +//############################################################################ + +object Test { + def main(args: Array[String]): Unit = { + M0.test; + M1.test; + M2.test; + () + } +} + +//############################################################################ -- cgit v1.2.3