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
---------------------------------------------
next prev 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