Kaleidoscope home
Denis Bouhineau's Workspace
helploginprintemail   log in  
J'ai essaye de mettre des choses dans un TiddlyWiki : TiddlyWikiProlog (entre autre un interpréteur, construit à partir d'emprunts de code javascript de Jan Grant, ce même interpréteur se trouve avec une console, et à coté un début d'assemblage d'un dispositif d'autoévauation avec editeur), les trois ensembles (interpreteur, editeur, et console + l'autoévaluation) se trouve ICI .
Il y a aussi mes fiches de td , tp et examens.

Nouveauté 2010 : l'ufr-imag lance officiellement un Moodle. J'y mets des éléments pour l'UE ...

En outre, voici quelques liens :
Dernièrement, mes étudiants m'ont demandé si je pouvais leur donner un (des) arbre d'exécution imprimé sur la papier. Ma réponse fut que c'était difficile, un arbre interessant (de mon point de vue) tenant difficilement sur une feuille. Pour en vérifier l'exactitude, en cette journée de grève, privé d'étudiant, j'ai construit un petit arbre pour l'analyse 'yntaxique d'une petite expresssion (c'est l'analyse syntaxique d'un ou exclusif exprimé sous forme de ou, de et et de non)  :
Analyse de la grammaire suivante d'expressions booléennes (avec priorité sur le 'et' par rapport au 'ou') :
    S   T 'ou' S | T
    T   E 'et' T | E
    E   'non' V | V | '(' S')'
    V   'a' | 'b'

Programme ProLog :   
analyse(M) :- analyseS(M,[]).
    analyseS(M,R) :- analyseT(M,N), N=['ou'|P], analyseS(P,R).
analyseS(M,R) :- analyseT(M,R).
    analyseT(M,R) :- analyseE(M,N), N=['et'|P], analyseT(P,R).
analyseT(M,R) :- analyseE(M,R).
    analyseE(M,R) :- M=['non'|N], analyseV(N,R).
analyseE(M,R) :- analyseV(M,R).
    analyseE(M,R) :- M=['('|N], analyseS(N,P), P=[')'|R].
    analyseV(['a'|R],R).
    analyseV(['b'|R],R).

Requêtes :
    ?- analyse([a,et,non,b,ou,non,a,et,b]).
Succés.
    ?- analyse([a,et,non,ou,non,et,b]).
Echec.

Programme d'analyse avec construction d'un arbre representant l'expression.
analyse(M,A) :- analyseS(M,[],A).
    analyseS(M,R,ou(A,B)) :- analyseT(M,N,A), N=[ou|P], analyseS(P,R,B).
analyseS(M,R,A) :- analyseT(M,R,A).
    analyseT(M,R,et(A,B)) :- analyseE(M,N,A), N=[et|P], analyseT(P,R,B).
analyseT(M,R,A) :- analyseE(M,R,A).
    analyseE(M,R,non(A)) :- M=[non|N], analyseV(N,R,A).
analyseE(M,R,A) :- analyseV(M,R,A).
    analyseE(M,R,A) :- M=['('|N], analyseS(N,P,A), P=[')'|R].
    analyseV([a|R],R,a).
    analyseV([b|R],R,b).

Requêtes :
    ?- analyse([a,et,non,b,ou,non,a,et,b],A).
A = ou(et(a, non(b)), et(non(a), b)) ;

Arbre d'exécution (incomplet, et simplifié (il manque quelques transitions et toutes les contraintes d'unifications), mais toutes les solutions sont données : il n'y a pas de succès  dans les branches non développées)


              (en plus grand , en encore plus grand pour l'impression, en pdf )
rem : pour arriver à ce résultat (médiocre), il m'a fallut, dans l'ordre, SWI-Prolog, MS-Word, MS-Excell, PdfCreator et TheGimp. (+ qlq autres mais pas concluants, c'est beaucoup, on doit pouvoir faire mieux, et plus vite (je n'ose donner le temps que cela m'a pris)) Le fichier MS-Word de départ.