Try triska's toplevel and add some debugging println!s.

This commit is contained in:
Nicolas Luck
2023-07-27 14:46:00 +02:00
parent 30dac8ea41
commit c2658dc6da
2 changed files with 32 additions and 2 deletions

View 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)]).

View 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 {