use "pcfparser.sml"; use "evaltypes.sml"; use "mysolution.sml"; (* defines default and interp *) (* increases print depth for structured values *) Compiler.Control.Print.printDepth := 100; val p1 = parsestr("(succ 1)"); val r1 = interp(p1,default); val p2 = parsestr("(pred 19)"); val r2 = interp(p2,default); val p3 = parsestr("(pred 1)"); val r3 = interp(p3,default); val p4 = parsestr("(pred 0)"); val r4 = interp(p4,default); val p5 = parsestr("(iszero 0)"); val r5 = interp(p5,default); val p6 = parsestr("(iszero 17)"); val r6 = interp(p6,default); val p7 = parsestr("((fn x => (succ (succ x))) 1)"); val r7 = interp(p7,default); val p8 = parsestr("((fn x => (succ (pred x))) 1)"); val r8 = interp(p8,default); val p9 = parsestr("((fn x => fn y => if (iszero x) then (pred y) else x) 1 12)"); val r9 = interp(p9,default); val p10 = parsestr("((fn x => fn y => if (iszero x) then (pred y) else x) 0 12)"); val r10 = interp(p10,default); val s11 = "rec loop=>fn x=>if (iszero x) then true else (loop (pred x))"; val p11 = parsestr(s11); val r11 = interp(AST_APP(p11,AST_NUM(2)),default); val s12 = "(rec sum=>(fn x=>(fn y=> if(iszero x)then y else ((sum (pred x)) (succ y)))))"; val p12 = parsestr(s12); val r12 = interp(AST_APP(AST_APP(p12,AST_NUM (2)),AST_NUM(3)),default); val s13 = "(rec sum=>(fn x=>(fn y=> if(iszero x)then y else ((sum (pred x)) (succ y)))))"; val p13 = parsestr(s12); val r13 = interp(AST_APP(AST_APP(p13,AST_NUM (0)),AST_NUM(3)),default); (* output from "using" this file val p1 = AST_APP (AST_SUCC,AST_NUM 1) : term val r1 = NUM 2 : value val p2 = AST_APP (AST_PRED,AST_NUM 19) : term val r2 = NUM 18 : value val p3 = AST_APP (AST_PRED,AST_NUM 1) : term val r3 = NUM 0 : value val p4 = AST_APP (AST_PRED,AST_NUM 0) : term val r4 = NUM 0 : value val p5 = AST_APP (AST_ISZERO,AST_NUM 0) : term val r5 = BOOL true : value val p6 = AST_APP (AST_ISZERO,AST_NUM 17) : term val r6 = BOOL false : value val p7 = AST_APP (AST_FUN ("x",AST_APP (AST_SUCC,AST_APP (AST_SUCC,AST_ID "x"))),AST_NUM 1) : term val r7 = NUM 3 : value val p8 = AST_APP (AST_FUN ("x",AST_APP (AST_SUCC,AST_APP (AST_PRED,AST_ID "x"))),AST_NUM 1) : term val r8 = NUM 1 : value val p9 = AST_APP (AST_APP (AST_FUN ("x", AST_FUN ("y", AST_IF (AST_APP (AST_ISZERO,AST_ID "x"),AST_APP (AST_PRED,AST_ID "y"), AST_ID "x"))),AST_NUM 1),AST_NUM 12) : term val r9 = NUM 1 : value val p10 = AST_APP (AST_APP (AST_FUN ("x", AST_FUN ("y", AST_IF (AST_APP (AST_ISZERO,AST_ID "x"),AST_APP (AST_PRED,AST_ID "y"), AST_ID "x"))),AST_NUM 0),AST_NUM 12) : term val r10 = NUM 11 : value val s11 = "rec loop=>fn x=>if (iszero x) then true else (loop (pred x))" : string val p11 = AST_REC ("loop", AST_FUN ("x", AST_IF (AST_APP (AST_ISZERO,AST_ID "x"),AST_BOOL true, AST_APP (AST_ID "loop",AST_APP (AST_PRED,AST_ID "x"))))) : term val r11 = BOOL true : value val s12 = "(rec sum=>(fn x=>(fn y=> if(iszero x)then y else ((sum (pred x)) (succ#" : string val p12 = AST_REC ("sum", AST_FUN ("x", AST_FUN ("y", AST_IF (AST_APP (AST_ISZERO,AST_ID "x"),AST_ID "y", AST_APP (AST_APP (AST_ID "sum",AST_APP (AST_PRED,AST_ID "x")), AST_APP (AST_SUCC,AST_ID "y")))))) : term val r12 = NUM 5 : value val s13 = "(rec sum=>(fn x=>(fn y=> if(iszero x)then y else ((sum (pred x)) (succ#" : string val p13 = AST_REC ("sum", AST_FUN ("x", AST_FUN ("y", AST_IF (AST_APP (AST_ISZERO,AST_ID "x"),AST_ID "y", AST_APP (AST_APP (AST_ID "sum",AST_APP (AST_PRED,AST_ID "x")), AST_APP (AST_SUCC,AST_ID "y")))))) : term val r13 = NUM 3 : value val it = () : unit *)