summaryrefslogtreecommitdiff
path: root/test/files/run/lisp.scala
diff options
context:
space:
mode:
authormichelou <michelou@epfl.ch>2008-05-20 14:25:02 +0000
committermichelou <michelou@epfl.ch>2008-05-20 14:25:02 +0000
commit3a0b0d40d7be5fb100a1b061aab54a4d4a51ae60 (patch)
treeb8bae307ad9df5c04ff7a8d68a9be755a1a6a748 /test/files/run/lisp.scala
parentc1f07338ed21e551446a5c98d262d738a9b7b0ce (diff)
downloadscala-3a0b0d40d7be5fb100a1b061aab54a4d4a51ae60.tar.gz
scala-3a0b0d40d7be5fb100a1b061aab54a4d4a51ae60.tar.bz2
scala-3a0b0d40d7be5fb100a1b061aab54a4d4a51ae60.zip
int -> Int, etc..
Diffstat (limited to 'test/files/run/lisp.scala')
-rw-r--r--test/files/run/lisp.scala59
1 files changed, 29 insertions, 30 deletions
diff --git a/test/files/run/lisp.scala b/test/files/run/lisp.scala
index 8a559bc813..eeafadcc9b 100644
--- a/test/files/run/lisp.scala
+++ b/test/files/run/lisp.scala
@@ -8,15 +8,15 @@
class LispTokenizer(s: String) extends Iterator[String] {
private var i = 0;
- private def isDelimiter(ch: Char) = ch <= ' ' || ch == '(' || ch == ')';
+ private def isDelimiter(ch: Char) = ch <= ' ' || ch == '(' || ch == ')'
def hasNext: Boolean = {
- while (i < s.length() && s.charAt(i) <= ' ') { i = i + 1 }
+ while (i < s.length() && s.charAt(i) <= ' ') i += 1
i < s.length()
}
def next: String =
if (hasNext) {
val start = i
- if (isDelimiter(s charAt i)) i = i + 1
+ if (isDelimiter(s charAt i)) i += 1
else
do i = i + 1
while (!isDelimiter(s charAt i))
@@ -28,14 +28,14 @@ class LispTokenizer(s: String) extends Iterator[String] {
// Lisp Interface
trait Lisp {
- type Data;
+ type Data
- def string2lisp(s: String): Data;
- def lisp2string(s: Data): String;
+ def string2lisp(s: String): Data
+ def lisp2string(s: Data): String
- def evaluate(d: Data): Data;
- // !!! def evaluate(s: String): Data = evaluate(string2lisp(s));
- def evaluate(s: String): Data;
+ def evaluate(d: Data): Data
+ // !!! def evaluate(s: String): Data = evaluate(string2lisp(s))
+ def evaluate(s: String): Data
}
//############################################################################
@@ -43,7 +43,7 @@ trait Lisp {
object LispCaseClasses extends Lisp {
- import List.range;
+ import List.range
trait Data {
def elemsToString(): String = toString();
@@ -98,9 +98,9 @@ object LispCaseClasses extends Lisp {
x6: Data, x7: Data, x8: Data, x9: Data): Data =
CONS(x0, list(x1, x2, x3, x4, x5, x6, x7, x8, x9));
- var curexp: Data = null;
- var trace: Boolean = false;
- var indent: Int = 0;
+ var curexp: Data = null
+ var trace: Boolean = false
+ var indent: Int = 0
def lispError[a](msg: String): a =
error("error: " + msg + "\n" + curexp);
@@ -146,14 +146,14 @@ object LispCaseClasses extends Lisp {
val prevexp = curexp;
curexp = x;
if (trace) {
- for (val x <- range(1, indent)) Console.print(" ");
+ for (x <- range(1, indent)) Console.print(" ");
Console.println("===> " + x);
indent = indent + 1;
}
val result = eval1(x, env);
if (trace) {
indent = indent - 1;
- for (val x <- range(1, indent)) Console.print(" ");
+ for (x <- range(1, indent)) Console.print(" ");
Console.println("<=== " + result);
}
curexp = prevexp;
@@ -267,8 +267,8 @@ object LispAny extends Lisp {
case class Lambda(f: List[Data] => Data);
var curexp: Data = null;
- var trace: boolean = false;
- var indent: int = 0;
+ var trace: Boolean = false;
+ var indent: Int = 0;
def lispError[a](msg: String): a =
error("error: " + msg + "\n" + curexp);
@@ -291,8 +291,8 @@ object LispAny extends Lisp {
case _ => lispError("malformed list: " + x)
}
- def asInt(x: Data): int = x match {
- case y: int => y
+ def asInt(x: Data): Int = x match {
+ case y: Int => y
case _ => lispError("not an integer: " + x)
}
@@ -301,8 +301,7 @@ object LispAny extends Lisp {
case _ => lispError("not a string: " + x)
}
- def asBoolean(x: Data): boolean =
- if (x == 0) false else true;
+ def asBoolean(x: Data): Boolean = x != 0
def normalize(x: Data): Data = x match {
case 'and :: x :: y :: Nil =>
@@ -327,13 +326,13 @@ object LispAny extends Lisp {
val prevexp = curexp;
curexp = x;
if (trace) {
- for (val x <- range(1, indent)) Console.print(" ");
+ for (x <- range(1, indent)) Console.print(" ");
Console.println("===> " + x);
- indent = indent + 1;
+ indent += 1;
}
val result = eval1(x, env);
if (trace) {
- indent = indent - 1;
+ indent -= 1;
for (val x <- range(1, indent)) Console.print(" ");
Console.println("<=== " + result);
}
@@ -358,7 +357,7 @@ object LispAny extends Lisp {
apply(eval(y, env), z map (x => eval(x, env)))
case Lambda(_) => x
case y: String => x
- case y: int => x
+ case y: Int => x
case y => lispError("illegal term")
}
@@ -404,14 +403,14 @@ object LispAny extends Lisp {
.extend("=", Lambda{
case List(arg1, arg2) => if(arg1 == arg2) 1 else 0})
.extend("+", Lambda{
- case List(arg1: int, arg2: int) => arg1 + arg2
+ case List(arg1: Int, arg2: Int) => arg1 + arg2
case List(arg1: String, arg2: String) => arg1 + arg2})
.extend("-", Lambda{
- case List(arg1: int, arg2: int) => arg1 - arg2})
+ case List(arg1: Int, arg2: Int) => arg1 - arg2})
.extend("*", Lambda{
- case List(arg1: int, arg2: int) => arg1 * arg2})
+ case List(arg1: Int, arg2: Int) => arg1 * arg2})
.extend("/", Lambda{
- case List(arg1: int, arg2: int) => arg1 / arg2})
+ case List(arg1: Int, arg2: Int) => arg1 / arg2})
.extend("nil", Nil)
.extend("cons", Lambda{
case List(arg1, arg2) => arg1 :: asList(arg2)})
@@ -510,7 +509,7 @@ class LispUser(lisp: Lisp) {
// Main
object Test {
- def main(args: Array[String]): Unit = {
+ def main(args: Array[String]) {
new LispUser(LispCaseClasses).run;
new LispUser(LispAny).run;
()