equal
deleted
inserted
replaced
780 error "No support for querying multiple solutions in the prolog system yap" |
780 error "No support for querying multiple solutions in the prolog system yap" |
781 |
781 |
782 fun prelude system = |
782 fun prelude system = |
783 case system of SWI_PROLOG => swi_prolog_prelude | YAP => yap_prelude |
783 case system of SWI_PROLOG => swi_prolog_prelude | YAP => yap_prelude |
784 |
784 |
785 fun invoke system file_name = |
785 fun invoke system file = |
786 let |
786 let |
787 val env_var = |
787 val (env_var, cmd) = |
788 (case system of SWI_PROLOG => "EXEC_SWIPL"| YAP => "EXEC_YAP") |
788 (case system of |
789 val prog = getenv env_var |
789 SWI_PROLOG => ("EXEC_SWIPL", "\"$EXEC_SWIPL\" -f ") |
790 val cmd = |
790 | YAP => ("EXEC_YAP", "\"$EXEC_YAP\" -L ")) |
791 case system of SWI_PROLOG => prog ^ " -f " | YAP => prog ^ " -L " |
791 in |
792 in |
792 if getenv env_var = "" then |
793 if prog = "" then |
|
794 (warning (env_var ^ " not set; could not execute code for " ^ string_of_system system); "") |
793 (warning (env_var ^ " not set; could not execute code for " ^ string_of_system system); "") |
795 else fst (bash_output (cmd ^ file_name)) |
794 else fst (bash_output (cmd ^ File.shell_path file)) |
796 end |
795 end |
797 |
796 |
798 (* parsing prolog solution *) |
797 (* parsing prolog solution *) |
799 |
798 |
800 val scan_number = |
799 val scan_number = |
855 val args' = map (rename_vars_term renaming) args |
854 val args' = map (rename_vars_term renaming) args |
856 val prog = prelude system ^ query system nsols (query_rel, args') vnames' ^ write_program p |
855 val prog = prelude system ^ query system nsols (query_rel, args') vnames' ^ write_program p |
857 val _ = tracing ("Generated prolog program:\n" ^ prog) |
856 val _ = tracing ("Generated prolog program:\n" ^ prog) |
858 val solution = TimeLimit.timeLimit timeout (fn prog => |
857 val solution = TimeLimit.timeLimit timeout (fn prog => |
859 Isabelle_System.with_tmp_file "prolog_file" (fn prolog_file => |
858 Isabelle_System.with_tmp_file "prolog_file" (fn prolog_file => |
860 (File.write prolog_file prog; invoke system (Path.implode prolog_file)))) prog |
859 (File.write prolog_file prog; invoke system prolog_file))) prog |
861 val _ = tracing ("Prolog returned solution(s):\n" ^ solution) |
860 val _ = tracing ("Prolog returned solution(s):\n" ^ solution) |
862 val tss = parse_solutions solution |
861 val tss = parse_solutions solution |
863 in |
862 in |
864 tss |
863 tss |
865 end |
864 end |