scala/ScalaBook/chapter-03/sexp.scala
abstract class SExp
case object NilSExp extends SExp
case class Atom(elem: Char) extends SExp
case class Pair(left : SExp,
right: SExp) extends SExp
//
val NIL = 0
val ATOM = 1
val PAIR = 2
//
def createSExp() : SExp = {
println("Enter choice...")
println("0 for NIL");
println("1 for ATOM");
print("2 for PAIR\n? ");
val choice : Int = readInt()
if (choice == NIL)
return NilSExp
else if (choice == ATOM) {
print("Enter atom...\n? ");
val s : Char = readChar()
return Atom(s)
}
else
return Pair(createSExp(),createSExp())
}
def printSExp(s : SExp): Unit =
s match {
case NilSExp => print("nil")
case Atom(a) => print(a)
case Pair(l,r) => print("(")
printSExp(l)
print(",")
printSExp(r)
print(")")
}
var s:SExp = createSExp()
println()
printSExp(s)
println()