functor DEMO( structure P6 : sig structure Code: CodeSig datatype Stage = Stage1 | Stage2 | Stage3 | Stage4 | Stage5 | Stage6a | Stage6b val printCode : Code.Code -> string val readCode : string -> Code.Code end structure Interp : sig type Code type Dict val run : Code -> (string * real) list -> (string * real) list end sharing type Interp.Code = P6.Code.Code ) = struct local val demoDir = "/home/mulgara/year2/examples/CS201/ml/Demo/" val exampleDir = "/home/mulgara/year2/examples/cs201/doc/Demo/" fun rundemo f = PolyML.use( demoDir ^ f ) in open P6 open Interp fun doStudent s = (PolyML.cd ("/ldisk/kultarr/marking/cs201/Proj2/"^s^ "/home/mulgara/year2/"^s^"/CS201/Project"); ExtendedIO.execute "touch *"; PolyML.make "."); fun projdemo s = ( case s of Stage1 => rundemo "Stage1" | Stage2 => rundemo "Stage2" | Stage3 => rundemo "Stage3" | Stage4 => rundemo "Stage4" | Stage5 => rundemo "Stage5" | Stage6a => rundemo "Stage6a" | Stage6b => rundemo "Stage6b") fun dodemo optimisation file store = let fun message m = output(std_out, "\n" ^ m ^ "\n") val source = readCode (exampleDir^file) val result = optimisation source in message ("Testing using code from file "^file); message "on input"; message (PolyML.makestring store); message "Code from file is"; message (printCode source); message "Code after \"optimisation\" is"; message (printCode result); message "Running source code gives"; message (PolyML.makestring (run source store)); message "Running optimised code gives"; message (PolyML.makestring (run result store)); message "Test completed" end end end;