From: Nicolas Luck Date: Mon, 4 Dec 2023 19:10:06 +0000 (+0100) Subject: Don’t include unbound variables in results returned from run_query X-Git-Tag: v0.9.4~83^2~2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=99055b553a70f4d5eb589a9e6a315e86ac1e1ab1;p=scryer-prolog.git Don’t include unbound variables in results returned from run_query --- diff --git a/src/machine/lib_machine.rs b/src/machine/lib_machine.rs index b0cc880f..9d166c51 100644 --- a/src/machine/lib_machine.rs +++ b/src/machine/lib_machine.rs @@ -196,7 +196,9 @@ impl Machine { let output: String = outputter.result(); // println!("Result: {} = {}", var_key.to_string(), output); - bindings.insert(var_key.to_string(), Value::try_from(output).expect("asdfs")); + if var_key.to_string() != output { + bindings.insert(var_key.to_string(), Value::try_from(output).expect("Couldn't convert Houtput to Value")); + } } matches.push(QueryResolutionLine::Match(bindings)); @@ -338,6 +340,24 @@ mod tests { ); } + #[test] + fn empty_predicate() { + let mut machine = Machine::new_lib(); + machine.load_module_string( + "facts", + r#" + :- discontiguous(subject_class/2). + "#.to_string()); + + let result = machine.run_query(String::from( + "subject_class(X, _).", + )); + assert_eq!( + result, + Ok(QueryResolution::True) + ); + } + #[test] fn list_results() { let mut machine = Machine::new_lib(); @@ -486,14 +506,12 @@ mod tests { output, Ok(QueryResolution::Matches(vec![QueryMatch::from( btreemap! { - "Predicate" => Value::from("Predicate"), "Result" => Value::List( Vec::from([ Value::List([Value::from("p1"), Value::from("b")].into()), Value::List([Value::from("p2"), Value::from("b")].into()), ]) ), - "Target" => Value::from("Target"), } ),])) );