query method
Implementation
Iterable<Node> query(Database database, Term goal) {
final match = head.match(goal);
if (match == null) return const [];
final newHead = head.substitute(match);
final newBody = body.substitute(match);
return newBody
.query(database)
.map((item) => newHead.substitute(newBody.match(item)));
}