From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by margaux.inria.fr, Wed, 17 Mar 93 17:59:55 +0100 Received: from concorde.inria.fr by margaux.inria.fr, Wed, 17 Mar 93 12:32:39 +0100 Received: from dcs.ed.ac.uk (stroma.dcs.ed.ac.uk) by concorde.inria.fr; Wed, 17 Mar 1993 12:32:35 +0100 Received: from campay.dcs.ed.ac.uk by dcs.ed.ac.uk id aa10513; 17 Mar 93 11:31 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 Cc: caml-list@margaux 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 Sender: weis@margaux 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.