(* Interactive Mode * ---------------- * This routine repeatedly gets input from the user and then evaluates * the results. It is lovely. *) let interactive () = try let lexbuf = Lexing.from_channel stdin in (*while true do *) let result = Parser.program Lexer.token lexbuf in List.iter (fun x -> Lambda.print x ; print_newline() ) result; Lambda.print_var_env !Lambda.var_env; print_newline(); print_newline(); (* Bruijnize and interpret *) List.iter begin fun x -> try print_string "Interpreting: "; Lambda.print x; print_string " -> "; (*let ex = Lambda.expand x in*) let ex = Lambda.bruijnize (Lambda.expand x) in Lambda.print ex; print_newline(); let ans = Lambda.timed_reduce ex 3 in print_string "Result: "; Lambda.print ans; print_newline(); with Lambda.Timeout -> print_string "TIMEOUT"; print_newline() end result; (* done *) with Lexer.Eof -> print_string "There are "; print_int (List.length !Lambda.var_env); print_string " in the list.\n"; Lambda.print_var_env !Lambda.var_env; print_newline(); print_string "hmmm...\n"; exit 0 let randomness_test () = for i=1 to 10 do print_string "Rand: "; let ex = Lambda.rand 20 in Lambda.print ex; print_newline(); print_string "Eval: "; (*let gexp = Lambda.to_genome ex in*) let gexp = Lambda.bruijnize (Lambda.expand ex) in print_string "["; Lambda.print gexp; print_string "] "; begin try Lambda.print (Lambda.timed_reduce gexp 1); with Lambda.Timeout -> print_string "TIMEOUT"; () end; print_newline() done let _ = Random.self_init(); Primitives.install(); randomness_test(); print_string "--- Entering Interactive Mode ---"; print_newline(); interactive()