Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
Re: [Caml-list] Pattern matching and strings
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Alessandro Baretta <alex@b...>
Subject: Re: [Caml-list] Pattern matching and strings (and a mini-bug in Scanf)

Luc Maranget wrote:
> Hum, I am not found of such an idea. As you tell yoursef,  ``(^)  is
> an operator rather than a  constructor''. Making a special case for
> (^) is a bad idea from the start.
> The special thing about a pattern is that is contains constructors,
> variables, (and constants) and nothing else.
> This restriction allows efficient
> compilation and lots of static checks in some uniform framework.
> Getting out of the uniform framework is a risk
> (cf. n+k patterns in Haskell eg).

I realize this, but I also believe that pattern matching on 
strings is something that would make string-processing code 
much clearer and more concise. I don't mean that we have to 
use perforce the same "function" and "match" constructs that 
we use for "ordinary" pattern matching, yet some form of 
pattern matching over strings would be helpful.

>>open Scanf
>>... = function x -> begin
>>   try sscanf x "foo%[^]" foo with Scan_failure _ ->
>>   try sscanf x "bar%[^]" bar with Scan_failure _ ->
>>     raise Unrecognized
> you mean
>  ... = function x -> begin
>     try sscanf x "foo%s" foo with Scan_failure _ ->
>     try sscanf x "bar%s" bar with Scan_failure _ ->
>       raise Unrecognized
>  end

I meant what I wrote. The %s conversion stops reading at the 
  first whitespace character. However, ocaml does not like 
the  "%[^]" which, in my opinion, is to be considered a 
mini-bug. "%[^]" should be interpreted as "the set of all 
characters except none", which is "the set of all 
characters", which can also be expressed, more verbosely, as 
"%[\000-\255]". By the same standards, "%[]" is rejected, 
when it should be interpreted as "the set containing no 
characters", or more verbosely "%[^\000-\255]"

>>An equivalent mapping could be done with the Str library or 
>>any other regexp library.
> Those libs are optional.... (at present).
> I agree, having some kind of fusion between ML pattern-matching and
> regexp-matching is an issue, there is research work on this.
> But this means lot of work...
> --Luc

Do you know of any literature on the subject which I might 
give a look at?


To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: