),
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
}
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 {