Stream patterne matching

cr@dcs.ed.ac.uk
Wed, 17 Mar 93 11:31:10 GMT

From: cr@dcs.ed.ac.uk
Date: Wed, 17 Mar 93 11:31:10 GMT
Message-Id: <4353.9303171131@campay.dcs.ed.ac.uk>
To: Michel.Mauny@inria.fr
In-Reply-To: Michel Mauny's message of Wed, 17 Mar 1993 11:31:10 +0100 (MET) <9303171031.AA15612@pauillac.inria.fr>
Subject: Stream patterne matching

Ok, Si j'ai bien compris le fait d'abstraire une re`gle fait perdre des
factorisations. Ce qui est illustre' par l'exemple suivant :

#let E = function
# [< '0; '1 >] -> true
# |[< '0; '2 >] -> false;;

est factorisable. Mais

#let pp = function p -> function
# [< '0; '1 >] -> true
# |[< p _ ; '2 >] -> false;;

ne l'est pas. Pourtant (pp (function [<'0 >] -> ())) est e'quivalent a` E.

Es-je bien compris ?

Pourtant, j'ai un doute. si l'on essaye E, on s'aperc,oit qu'il y a un cas
inutilise dans le patterne matching. Une factorisation est donc ne'cessaire. Il
faut la faire a la main ! Tandis que dans pp, le compilo ne bronche pas. caml
fait donc de'ja une diffe'rence entre les deux.

Ne pourrais t'on pas au moins faire la factorisation quand le compilo signale
un cas inutilise' dans le matching ? Avec e'ventuellement un warning pour
l'utilisateur ?

Mais l'essentiel n'est-il pas que si (pp p) est factorisable alors E(p') l'est
aussi ? (cela esr vrai, je pense ?)

Y a-t'il des exemples plus complexes ?

Christophe

PS: Je crois que je commence a jouer l'avocat du diable. En effet en regardant
a` nouveau les analyseur que j'ai pu ecrire, je me dis que je ne sais plus trop
si je veux la factorisation.

En effet, j'e'tait un peu e'nerve a chaque foi que je m'apercevais qu'une
factorisation etait ne'cessaire, et que je devais donc taper une dizaine de
lignes supplementaires.

Mais au total, le programme est en gros deux fois plus gros qu'avec camlyacc
(sauf qu'avec camlyacc, je n'aurais pas pus l'ecrire !). Ce n'est pas si
terrible.

Et, le fait de factoriser soi-meme permet d'avoir un programme dont le
comportement est limpide.

Je ne sais donc plus se que je veux !!!!!

PS-bis: Je suis sure que certain d'entre vous ont des syste`mes automatiques
pour gerer les accents. Moi j'utilise emacs pour lire mon courier, quelqu'un
peut-il me suggerer quelque-chose.