scala/ex.scala
changeset 194 fc2a5e9fbb97
parent 193 317a2532c567
child 195 f06aa4e1c25b
equal deleted inserted replaced
193:317a2532c567 194:fc2a5e9fbb97
     2 import turing._
     2 import turing._
     3 import abacus._
     3 import abacus._
     4 import comp1._
     4 import comp1._
     5 
     5 
     6 // Turing machine examples
     6 // Turing machine examples
     7 val TMCopy = TM(List((WBk, 5), (R, 2), (R, 3), (R, 2), (WOc, 3), 
     7 val TMCopy = TM((WBk, 5), (R, 2), (R, 3), (R, 2), (WOc, 3), 
     8                      (L, 4), (L, 4), (L, 5), (R, 11), (R, 6), 
     8                 (L, 4), (L, 4), (L, 5), (R, 11), (R, 6), 
     9                      (R, 7), (WBk, 6), (R, 7), (R, 8), (WOc, 9), 
     9                 (R, 7), (WBk, 6), (R, 7), (R, 8), (WOc, 9), 
    10                      (R, 8), (L, 10), (L, 9), (L, 10), (L, 5), 
    10                 (R, 8), (L, 10), (L, 9), (L, 10), (L, 5), 
    11                      (L, 0), (R, 12), (WOc, 13), (L, 14), (R, 12), 
    11                 (L, 0), (R, 12), (WOc, 13), (L, 14), (R, 12), 
    12                      (R, 12), (L, 15), (WBk, 14), (R, 0), (L, 15)))
    12                 (R, 12), (L, 15), (WBk, 14), (R, 0), (L, 15))
    13 
    13 
    14 println("TMCopy:    " + (TMCopy.run(Tape(3))))
    14 println("TMCopy:    " + (TMCopy.run(Tape(3))))
    15 println("TMfindnth: " + (TMFindnth(3).run(Tape(1,2,3,4,5))))
    15 println("TMfindnth: " + (TMFindnth(3).run(Tape(1,2,3,4,5))))
    16 println("TMMopup: "   + (TMMopup(3).run(Tape(1,2,3,4,5))))
    16 println("TMMopup:   " + (TMMopup(3).run(Tape(1,2,3,4,5))))
    17 
    17 
    18 
    18 
    19 // Abacus machine examples
    19 // Abacus machine examples
    20 def Copy(in: Int, out: Int, jump: Int) = 
    20 def Copy(in: Int, out: Int, jump: Int) = 
    21   Abacus(List(Dec(in, jump), Inc(out), Goto(0))) 
    21   Abacus(List(Dec(in, jump), Inc(out), Goto(0))) 
    30   Abacus(List(Inc(out), Dec(in1, jump))) ++ 
    30   Abacus(List(Inc(out), Dec(in1, jump))) ++ 
    31   Mult(out, in2, tmp2, tmp1, -1).shift(2, -1).adjust(-1, 10) ++
    31   Mult(out, in2, tmp2, tmp1, -1).shift(2, -1).adjust(-1, 10) ++
    32   Copy(tmp2, out, -1).shift(10, -1). adjust(-1, 1)
    32   Copy(tmp2, out, -1).shift(10, -1). adjust(-1, 1)
    33 }
    33 }
    34 
    34 
    35 println("Copy: 3     " + (Copy(0, 1, -1).run(Map(0 -> 3, 1 -> 0))))
    35 println("Copy 3:     " + (Copy(0, 1, -1).run(Map(0 -> 3, 1 -> 0))))
    36 println("Plus: 3 + 4 " + (Plus(0, 1, 2, -1).run(Map(0 -> 3, 1 -> 4, 2 -> 0))))
    36 println("Plus 3 + 4: " + (Plus(0, 1, 2, -1).run(Map(0 -> 3, 1 -> 4, 2 -> 0))))
    37 println("Mult: 3 * 5 " + (Mult(0, 1, 2, 3, -1).run(Map(0 -> 3, 1 -> 5, 2 -> 0, 3 -> 0))))
    37 println("Mult 3 * 5: " + (Mult(0, 1, 2, 3, -1).run(Map(0 -> 3, 1 -> 5, 2 -> 0, 3 -> 0))))
    38 println("Expo: 3 ^ 4 " + (Expo(0, 1, 2, 3, 4, -1).run(Map(0 -> 4, 1 -> 3, 2 -> 0, 3 -> 0, 4 -> 0))))
    38 println("Expo 3 ^ 4: " + (Expo(0, 1, 2, 3, 4, -1).run(Map(0 -> 4, 1 -> 3, 2 -> 0, 3 -> 0, 4 -> 0))))
    39 
    39 
    40 
    40 
    41 // Abacus-to-TM translation examples
    41 // Abacus-to-TM translation examples
    42 println("Compiled Copy 3:     " + toTM(Copy(0, 1, Int.MaxValue).p).run(Tape(3,0,0)))
    42 println("Compiled Copy 3:     " + toTM(Copy(0, 1, Int.MaxValue).p).run(Tape(3,0,0)))
    43 println("Compiled Plus 3 + 4: " + toTM(Plus(0, 1, 2, Int.MaxValue).p).run(Tape(3,4,0,0)))
    43 println("Compiled Plus 3 + 4: " + toTM(Plus(0, 1, 2, Int.MaxValue).p).run(Tape(3,4,0,0)))