From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id MAA24024 for caml-red; Mon, 26 Jun 2000 12:26:58 +0200 (MET DST) Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id QAA02955 for ; Sat, 24 Jun 2000 16:44:52 +0200 (MET DST) Received: from miss.wu-wien.ac.at (miss.wu-wien.ac.at [137.208.107.17]) by concorde.inria.fr (8.10.0/8.10.0) with ESMTP id e5OEiqv25037 for ; Sat, 24 Jun 2000 16:44:52 +0200 (MET DST) Received: (from mottl@localhost) by miss.wu-wien.ac.at (8.9.0/8.9.0) id QAA12242; Sat, 24 Jun 2000 16:44:20 +0200 (MET DST) Date: Sat, 24 Jun 2000 16:44:20 +0200 From: Markus Mottl To: John Prevost Cc: caml-list@inria.fr Subject: Re: Labels and operators Message-ID: <20000624164420.B5164@miss.wu-wien.ac.at> References: <87bt0y71f9.fsf@isil.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2i In-Reply-To: <87bt0y71f9.fsf@isil.localdomain>; from prevost@maya.com on Mon, Jun 19, 2000 at 00:14:02 -0400 Sender: weis@pauillac.inria.fr On Mon, 19 Jun 2000, John Prevost wrote: > A friend of mine recently said "if ML had regexp stuff that was as > convenient as Perl, I'd switch to it for everything", and mentioned =~ > as something he specifically wanted. So, as I was walking home > tonight, I thought "hey, I bet I could make some little operators for > the PCRE library and show him!" The "=~"-operator itself, as it is normally used in Perl for matching, is fairly easy to replicate: let (=~) str pat = Pcre.pmatch ~pat str let _ = print_endline (if read_line () =~ "foo" then "has foo!" else "no foo!") > But, it also occurred to me that you want to use the nice labelled > optional argument stuff, and I wasn't sure you could do that with > operators. Here's what I've discovered. Well, sometimes we are really struck by the only "two-dimensional" way in which we can write our sources (top-down + left-right). If we could write into the depth, there would be an elegant solution for adding arguments to infix operators... > The only solution I can think of is something like: [snip] > # "foo" =~ re "f";; > - : bool = true > # "foo" =~ re "f" ~pos:1;; > - : bool = false > > Which, well, works, but seems kind of nasty. I normally try to avoid new operators, but if I wanted to have a somewhat "powered up" version of "=~", your version here would look fine to me - just read every piece aloud: "foo" =~ re "f" ~pos:1 "foo" - is matched by - regular expression - "f" - at position one This is pretty close to the human way of expressing things. (Larry Wall, the linguist, would be proud of you! ;-) > since the labelled args could not in any way shape or form be thought > to go with either expr1 or expr2. This would lead to things like: > > # "foo" =~ ~pos:1 "f";; > - : bool = false > > being possible. Don't know whether it's a great idea, though. I prefer your first version: "subject", "verb" and "object" are close together, the additional modifiers only follow afterwards. To my knowledge, most natural languages would order expressions like this. Best regards, Markus Mottl -- Markus Mottl, mottl@miss.wu-wien.ac.at, http://miss.wu-wien.ac.at/~mottl