diff --git a/lab4/unificateur.py b/lab4/unificateur.py index 3fd6c96..1b93e6a 100755 --- a/lab4/unificateur.py +++ b/lab4/unificateur.py @@ -148,8 +148,38 @@ ## @param proposition2 porposition 2 avec variable ## @ret substitution dans un dico is le filtrage reussi : {'?x':'a',...}, 'FAIL' sinon ############################################################################### -def unifit(proposition1, proposition2): - pass +def unifit(pat1, pat2): + if testeAtome(pat1) or testeAtome(pat2): + if not testeAtome(pat1): + pat1, pat2 = pat2, pat1 + + if pat1 == pat2: + return {} + else: + if testeVariable(pat1): + if variableDansSubstitutions(pat1, pat2): + return echec + else: + return {pat1: pat2} + else: + if testeVariable(pat2): + return {pat2: pat2} + else: + return echec + else: + f1 = pat1[0] + t1 = pat1[1:] + f2 = pat2[0] + t2 = pat2[1:] + z1 = unifit(f1, f2) + if z1 == echec: + return echec + g1 = substitueVariables(t1, z1) + g2 = substitueVariables(t2, z1) + z2 = unifit(g1, g2) + if z2 == echec: + return echec + return unionSubstitution(z1, z2) ###############################################################################