caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Christophe Raffalli <christophe.raffalli@univ-savoie.fr>
To: sejourne_kevin <sejourne_kevin@yahoo.fr>
Cc: caml-list <caml-list@inria.fr>
Subject: Re: [Caml-list] Request for complete pattern matching
Date: Wed, 23 Nov 2005 15:47:31 +0100	[thread overview]
Message-ID: <43848103.9060504@univ-savoie.fr> (raw)
In-Reply-To: <43842069.3070700@yahoo.fr>

sejourne_kevin a écrit :
> Christophe Raffalli a écrit :
> 
>> - Lazy constructor and function can not be matched ... and this is 
>> ennoying
>>
>> I saw a post recently about lazy constructor and I can not write the
>> camlp4 extension I want because of the second limitation ...
>>
>> It may be not clear what I mean by matching a function (looks impossible
>> ;-). I mean something like
>>
>> pattern <= expr expr expr       is a pattern
>>
>> and a function f is matched by
>>
>> p <= e1 ... eN      iff     f e1 ... eN is matched by p
>>
>> (I do not care about the final syntax ...)
>>
> 
> You want something like that ?
> 
> let f = function
>       (x,y,z) when f x y z -> ...
>     | (x,y,z) when g x y z -> ...
>     | all_other_cases -> (static/compile_time)_error ...
> 

No this is not a problem of test. I want to be able to write

match e with
   (0 <= 0, g) -> g
| (f, 0 <= 0) -> f
| (f, g) -> fun x -> f x + g x

which means the same as

match e with
   (f, g) ->
   if f 0 = 0 then g else if g 0 = 0 then f else fun x -> f x + g x

- The first problem is that removing this feature is a hard translation, 
and I would like the compiler to do it

- The second problem is that I really need it to extend the pattern 
matching of ocaml using camlp4

Let us do a simple example (this is not what I am doing):

type 'a lazy = unit -> 'a

Lazy(e) := fun () ->  e (defined as a camlp4 macro to be sure that e is 
not evaluated)

and then

"Lazy(p)" in a pattern means "p <= ()" (this should also be a camlp4 
macro, but p <= () does not exist in the language)





> Should be hard to eval f and g before execution...
> 
> 
> 
> 
> 
> 
> Kévin.
> 
>     
> 
>     
>        
> ___________________________________________________________________________ 
> Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! 
> Messenger Téléchargez cette version sur http://fr.messenger.yahoo.com
> 

-- 
Christophe Raffalli
Université de Savoie
Batiment Le Chablais, bureau 21
73376 Le Bourget-du-Lac Cedex

tél: (33) 4 79 75 81 03
fax: (33) 4 79 75 87 42
mail: Christophe.Raffalli@univ-savoie.fr
www: http://www.lama.univ-savoie.fr/~RAFFALLI
---------------------------------------------
IMPORTANT: this mail is signed using PGP/MIME
At least Enigmail/Mozilla, mutt or evolution
can check this signature. The public key is
stored on www.keyserver.net
---------------------------------------------


  parent reply	other threads:[~2005-11-23 14:47 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-22 22:43 Christophe Raffalli
2005-11-23  5:54 ` [Caml-list] " Luc Maranget
2005-11-23 14:37   ` Christophe Raffalli
2005-11-23 10:06 ` Michal Moskal
2005-11-23 15:26   ` Christophe Raffalli
     [not found] ` <43842069.3070700@yahoo.fr>
2005-11-23 14:47   ` Christophe Raffalli [this message]
2005-11-23 18:31     ` Luc Maranget
2005-11-23 20:56       ` Martin Jambon
2005-11-23 21:30         ` skaller
2005-11-23 22:25           ` Martin Jambon
2005-11-24  9:29         ` Luc Maranget
2005-11-25 23:01           ` Martin Jambon
2005-11-23 20:56       ` Christophe Raffalli
2005-11-24  9:41         ` Luc Maranget

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=43848103.9060504@univ-savoie.fr \
    --to=christophe.raffalli@univ-savoie.fr \
    --cc=caml-list@inria.fr \
    --cc=sejourne_kevin@yahoo.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).