query method
Implementation
@override
Iterable<Node> query(Database database) {
Iterable<Node> solutions(int index, Map<Variable, Node> bindings) sync* {
if (index < arguments.length) {
final arg = arguments[index];
final subs = arg.substitute(bindings) as Term;
for (final item in database.query(subs)) {
final unified = mergeBindings(arg.match(item), bindings);
if (unified != null) {
yield* solutions(index + 1, unified);
}
}
} else {
yield substitute(bindings);
}
}
return solutions(0, newBindings());
}