From 98bff1e5e282d6f4a3ba08d0f25160eda2593602 Mon Sep 17 00:00:00 2001 From: ccremers Date: Fri, 20 Aug 2004 15:09:49 +0000 Subject: [PATCH] - Solved the TERM_Hidden issue for the keys in termMguSubTerm. Yields cleaner behaviour for MguSubterm. --- src/mgu.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/mgu.c b/src/mgu.c index 0c328f3..b6bfdd3 100644 --- a/src/mgu.c +++ b/src/mgu.c @@ -23,6 +23,8 @@ */ int mgu_match = 0; +extern Term TERM_Hidden; + void showSubst (Term t) { @@ -309,16 +311,21 @@ termMguSubTerm (Term t1, Term t2, int (*iterator) (), Termlist keylist_new; Term newkey; - keylist_new = termlistShallow (keylist); newkey = inverseKey (inverses, t2->right.key); - keylist_new = termlistAdd (keylist_new, newkey); - // Recurse - flag = - flag && termMguSubTerm (t1, t2->left.op, iterator, inverses, - keylist_new); + // We can never produce the TERM_Hidden key, thus, this is not a valid iteration. + if (!isTermEqual (newkey, TERM_Hidden)) + { + keylist_new = termlistShallow (keylist); + keylist_new = termlistAdd (keylist_new, newkey); - termlistDelete (keylist_new); + // Recurse + flag = + flag && termMguSubTerm (t1, t2->left.op, iterator, inverses, + keylist_new); + + termlistDelete (keylist_new); + } termDelete (newkey); } }