diff options
author | paltherr <paltherr@epfl.ch> | 2003-03-20 12:46:13 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-03-20 12:46:13 +0000 |
commit | 644e5bdf878a3fb37b65d3a6578387a83d4c0ab4 (patch) | |
tree | 4430a56dde5e7875aff006be397812c0f265d418 /test/files/run/Course-2002-10.scala | |
parent | 3be5b4361ad5a651556c4c8b6cfd5d25f4f8e5e1 (diff) | |
download | scala-644e5bdf878a3fb37b65d3a6578387a83d4c0ab4.tar.gz scala-644e5bdf878a3fb37b65d3a6578387a83d4c0ab4.tar.bz2 scala-644e5bdf878a3fb37b65d3a6578387a83d4c0ab4.zip |
- Added test file Course-2002-10.scala
Diffstat (limited to 'test/files/run/Course-2002-10.scala')
-rw-r--r-- | test/files/run/Course-2002-10.scala | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/test/files/run/Course-2002-10.scala b/test/files/run/Course-2002-10.scala new file mode 100644 index 0000000000..3ec3440e80 --- /dev/null +++ b/test/files/run/Course-2002-10.scala @@ -0,0 +1,132 @@ +//############################################################################ +// Programmation IV - 2002 - Week 10 +//############################################################################ +// $Id$ + +module 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(); + } +} + +//############################################################################ + +module 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 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(); + } +} + +//############################################################################ + +module 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(100); + System.out.print("prime numbers:"); + while (i.hasNext) { System.out.print(" " + i.next); } + System.out.println(); + } +} + +//############################################################################ + +module Test { + def main(args: Array[String]): Unit = { + M0.test; + M1.test; + M2.test; + () + } +} + +//############################################################################ |