]> Repositorios git - scryer-prolog.git/commitdiff
Try triska's toplevel and add some debugging println!s.
authorNicolas Luck <[email protected]>
Thu, 27 Jul 2023 12:46:00 +0000 (14:46 +0200)
committerNicolas Luck <[email protected]>
Thu, 27 Jul 2023 12:46:00 +0000 (14:46 +0200)
src/lib_toplevel.pl
src/machine/lib_machine.rs

index a7c8df13333f3eb273ae6c873444648e717cb3d3..4eccbafe39c8ee0b5861167aae5ecdc60a382b1d 100644 (file)
@@ -242,3 +242,30 @@ submit_query_and_print_all_results(_, _) :-
     ),
     write('false.'),
     nl.
+
+
+
+toplevel :-
+        read_term(Goal, [variable_names(VNs)]),
+        Goal,
+        write('bindings(['),
+        write_bindings(VNs),
+        write(']).'),
+        nl,
+        false.
+
+write_bindings([]).
+write_bindings([VN|VNs]) :-
+        write_bindings_(VNs, VN).
+
+write_bindings_([], VN) :-
+        write_binding(VN).
+write_bindings_([VN|VNs], Prev) :-
+        write_binding(Prev),
+        write(','),
+        write_bindings_(VNs, VN).
+
+write_binding(Var=Val) :-
+        write(Var),
+        write(=),
+        write_term(Val, [quoted(true),double_quotes(true)]).
\ No newline at end of file
index b75f9b6d7edeee0694917f744be5aa16c379bc97..194434c33c4af3c15758f60a6c068bc60de20649 100644 (file)
@@ -25,13 +25,16 @@ impl Machine {
     }
 
     pub fn run_query(&mut self, query: String) -> QueryResult {
-        self.set_user_input(query);
-        self.run_top_level(atom!("$toplevel"), (atom!("run_input_once"), 0));
+        let input = format!("{}", query);
+        println!("Running query: {}", input);
+        self.set_user_input(input);
+        self.run_top_level(atom!("$toplevel"), (atom!("toplevel"), 0));
         self.parse_output()
     }
 
     pub fn parse_output(&self) -> QueryResult {
         let output = self.get_user_output().trim().to_string();
+        println!("Output: {}", output);
         if output.starts_with("error(") {
             Err(output)
         } else {