expand goals inside (\+)/1
This commit is contained in:
@@ -678,6 +678,26 @@ impl RelationWorker {
|
||||
self.queue.push_back(clauses);
|
||||
Ok(QueryTerm::Jump(stub))
|
||||
}
|
||||
("\\+", 1) => {
|
||||
terms.push(Box::new(Term::Constant(
|
||||
Cell::default(),
|
||||
Constant::Atom(clause_name!("$fail"), None)
|
||||
)));
|
||||
|
||||
let conq = Term::Constant(
|
||||
Cell::default(),
|
||||
Constant::Atom(clause_name!("true"), None)
|
||||
);
|
||||
|
||||
let prec = Term::Clause(Cell::default(), clause_name!("->"), terms, None);
|
||||
let terms = vec![Box::new(prec), Box::new(conq)];
|
||||
|
||||
let term = Term::Clause(Cell::default(), clause_name!(";"), terms, None);
|
||||
let (stub, clauses) = self.fabricate_disjunct(term);
|
||||
|
||||
self.queue.push_back(clauses);
|
||||
Ok(QueryTerm::Jump(stub))
|
||||
}
|
||||
("$get_level", 1) => {
|
||||
if let Term::Var(_, ref var) = *terms[0] {
|
||||
Ok(QueryTerm::GetLevelAndUnify(Cell::default(), var.clone()))
|
||||
@@ -694,10 +714,12 @@ impl RelationWorker {
|
||||
Ok(QueryTerm::Clause(Cell::default(), ct, terms, false))
|
||||
}
|
||||
}
|
||||
arg @ Term::Var(..) => {
|
||||
let ct = ClauseType::Named(clause_name!("call"), 1, CodeIndex::default());
|
||||
Ok(QueryTerm::Clause(Cell::default(), ct, vec![Box::new(arg)], false))
|
||||
}
|
||||
Term::Var(..) => Ok(QueryTerm::Clause(
|
||||
Cell::default(),
|
||||
ClauseType::CallN,
|
||||
vec![Box::new(term)],
|
||||
false,
|
||||
)),
|
||||
_ => Err(ParserError::InadmissibleQueryTerm),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user