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.'),
|
write('false.'),
|
||||||
nl.
|
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 {
|
pub fn run_query(&mut self, query: String) -> QueryResult {
|
||||||
self.set_user_input(query);
|
let input = format!("{}", query);
|
||||||
self.run_top_level(atom!("$toplevel"), (atom!("run_input_once"), 0));
|
println!("Running query: {}", input);
|
||||||
|
self.set_user_input(input);
|
||||||
|
self.run_top_level(atom!("$toplevel"), (atom!("toplevel"), 0));
|
||||||
self.parse_output()
|
self.parse_output()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn parse_output(&self) -> QueryResult {
|
pub fn parse_output(&self) -> QueryResult {
|
||||||
let output = self.get_user_output().trim().to_string();
|
let output = self.get_user_output().trim().to_string();
|
||||||
|
println!("Output: {}", output);
|
||||||
if output.starts_with("error(") {
|
if output.starts_with("error(") {
|
||||||
Err(output)
|
Err(output)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user