Salut.
Apres avoir bataillé pendant un temps certain, je me resigne a venir poster ici. En esperant trouver des gens qui auraient le temps et le talent de me repondre...
Comme dit dans le titre, le probleme est ici de concevoir une simple fonction qui serait un debut de résolveur prolog.
Alors voilà, petite mise en bouche.
let prog1 = [ [a;b;c];[c;e];[e];[b;e] ];;
prog1 est un programme prolog tel que :
a:-b,c
c:-e
e:-
b:-e
Soit en francais : a est vrai si b et c sont vrais
c est vrai si e est vrai
e est vrai sans conditions
b est vrai si e est vrai.
donc b est vrrai, et c et vrai, donc a est vrai..
Jusque là tout va bien.
Maintenant,mon probleme est serai de creer une fonction "demontre" qui etant donné une liste d'elements et un programme , prouve que chaque element de la liste est demontré vrai par le programme...
Et là, je seche un peu...
J'ai commencé, mais cette fonction ne verifie que si les elements de la liste sont présents en singleton dans le programme
avec "estmembre" une fonction qui renvoie un boolen si l'element arg1 fait partie de la liste arg2 (p est un programme : une liste de liste)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 let rec demontreAux = fun p -> let rec loop = function [] -> true |e::l -> (estmembre [e] p) && demontre p l in loop
pour ceux que ca interesse:
VOilà... moi j'y arrive plus en tout cas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 let estmembre = fun x l -> ilexiste(fun y->x=y) l let ilexiste = fun p -> let rec eval = function [] -> false |e::l -> (p e) || (eval l) in eval
Partager