• Aucun résultat trouvé

Travail pratique #3 IFT-2030 December 7, 2005

N/A
N/A
Protected

Academic year: 2022

Partager "Travail pratique #3 IFT-2030 December 7, 2005"

Copied!
3
0
0

Texte intégral

(1)

Travail pratique #3

IFT-2030 December 7, 2005

¡¡ Dˆ u le 23 d´ ecembre ` a minuit !!

1 Survol

Ce TP a pour but de vous familiariser avec le langage Prolog.

Comme pour les TP pr´ec´edents, les ´etapes sont les suivantes:

1. Parfaire sa connaissance de Prolog.

2. Lire et comprendre cette donn´ee.

3. Lire, trouver, et comprendre le code fourni.

4. Compl´eter le code fourni.

5. ´Ecrire un rapport. Il doit d´ecrire votre exp´erience pendant les 4 points pr´ec´edents: probl`emes rencontr´es, surprises, choix que vous avez dˆu faire, options que vous avez sciemment rejet´ees, etc... Le rapport ne doit pas exc´eder 5 pages.

Contrairement aux deux premiers TP, l’´ecriture du code occupera probable- ment une plus large fraction du temps.

Ce travail est `a faire en groupes de 2 ´etudiants. Le rapport (au format PDF ou Postscript) et le code sont `a remettre par remise ´electronique avant la date indiqu´ee. Aucun retard ne sera accept´e. Indiquez clairement votre nom au d´ebut de chaque fichier.

Si un ´etudiant pr´ef`ere travailler seul, libre `a lui, mais l’´evaluation de son travail n’en tiendra pas compte. Si un ´etudiant ne trouve pas de partenaire, il doit me contacter au plus tard mardi 13 d´ecembreavantle cours. Des groupes de 3 ou plus sontexclus.

2 Les expressions r´ eguli` eres

Vous allez ´ecrire un programme Prolog qui fait de la recherche d’expressions r´eguli`eres (abbr´eg´eesregexp) dans des chaˆınes de caract`eres (voir

1

(2)

http://fr.wikipedia.org/wiki/Expression r´eguli`ere). Les expressions r´eguli`eres que vous allez manipuler ont les formes suivantes:

none la regexp qui n’accepte rien

C la regexp qui n’accepte que le caract`ereC any la regexp qui accepte n’importe quel caract`ere [] la regexp qui accepte la chaˆıne vide

[RE1|RE2] la concat´enation

RE1 \/ RE2 accepte une chaˆıne ssi RE1 ouRE2 l’accepte RE1 /\ RE2 accepte une chaˆıne ssi RE1 etRE2 l’acceptent kleene(RE) Une r´ep´etition arbitraire (possiblement vide) de RE Vous devrez non seulement ´ecrire la relationmatchmais aussi une relationopti- mizequi doit optimiser ces expressions autant que possible pour que la relation matchfonctionne au mieux. Voici quelques exemples d’optimisations simples:

RE \/ RE ⇒ RE [] /\ RE ⇒ []

[none|RE] ⇒ none

[RE] ⇒ RE

kleene(kleene(RE)) ⇒ kleene(RE)

Ajoutez-en. Vous devrez implanter une autre optimisation, moins simple mais tr`es importante pour la performance, qui est d’extraire des pr´efixes communs:

[RE|RE1s] \/ [RE|RE2s] ⇒ [RE | RE1s \/ RE2s]

La raison pour laquelle cette optimisation est moins simple est parce que les deux sous-regexps qui ont un pr´efixe commun peuvent ˆetre ´eloign´ees:

([RE|RE1s] \/ RE2) \/ ([RE|RE3s] \/ RE4)

⇒ [RE | RE1s \/ RE2s] \/ (RE2 \/ RE4) Donc votre optimiseur devrait ˆetre capable de transformer:

"hello" \/ "toto" \/ "help" \/ "titi" \/ "hello"

⇒ ["hel"|"lo" \/ "p"] \/ ["t"|"oto" \/ "iti"]

Vu que les chaˆınes de caract`eres en Prolog sont repr´esent´ees simplement par des listes d’entiers, la r´eponse de GNU Prolog ne ressemblera probablement pas `a ce que vous attendez. Par exemple:

| ?- optimize("hello" \/ "toto" \/ "help" \/ "titi" \/ "hello", RE).

RE = [104,101,108|[108|111]\/112]\/[116|[111,116|111]\/[105,116|105]]

(2 ms) yes

| ?-

La relationoptimizedoit ˆetre une fonction, c’est `a dire, quelle ne doit renvoyer qu’une seule valeur.

2

(3)

3 Le code fourni

Le code fourni implante seulement une partie de la relationmatch, et implante une relationsearchqui essaie d’appliquermatch`a chaque sous chaˆıne de la chaˆıne de caract`ere pass´ee en param`etre, apr`es avoir optimis´e la regexp.

4 Ce que vous devez faire

Vous avez deux parties `a coder:

1. d’abord il faut compl´eter la relationmatch.

2. ensuite il faut ´ecrire la relationoptimize.

5 Notes

Vous devez remettre deux fichiers: re.plet rapport.pdf.

Les commandes pour remettre ces fichier sont les suivantes:

% remise ift2030 tp2 rapport.pdf re.pl

• Vous pouvez bien sˆur d´efinir de nouvelles relations, mais vous ne devriez pas modifier de relations autres que celles mentionn´ees. Si toutefois il vous paraˆıt n´ecessaire de les modifier, d´ecrivez et justifiez la modification dans le rapport.

• La deuxi`eme partie n´ecessitera probablement l’usage de l’op´erateur de coupure.

• Tout usage de mat´eriel (code ou texte) emprunt´e `a quelqu’un d’autre (ou trouv´e sur le web) doit ˆetre dˆument mentionn´e, sans quoi cela sera consid´er´e comme du plagiat.

• Chaque ligne de code doit faire moins de 80 caract`eres. Tout d´epassement sera consid´er´e comme une erreur.

• V´erifiez la page web du cours, pour d’´eventuels errata, et d’autres indica- tions suppl´ementaires.

3

Références

Documents relatifs

Paris Ouest Nanterre La Défense) et Mona G érardin -L averGe (Univ.. Paris

 Julie est canadienne, elle parle français et anglais..  Luc est belge, il

Observe le plan ci-dessus et complète le texte avec ces mots : aller tout droit, en face de, à côté de, traverser, devant, près de, au coin du.. Attention

Donner la forme canonique puis étudier les signes de chacun des trinômes

• Tous les fichiers de la séquence retour à la page de titre.?.

Dans la sous-section Chargement/enregistrement – Propriétés VBA (voir Figure 22), vous pouvez choisir, si vous le souhaitez, de garder les macros des

Représenter la boîte à moustaches de la variable Ozone pour chaque mois avec la commande

La relation donnant le taux protidique du repas reconstitué en fonction de la dose des protides est une droite. Cette droite nous permet de prévoir l’allure