Try triska's toplevel and add some debugging println!s.
This commit is contained in:
@@ -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)]).
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user