caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] beginner question about pattern matching
@ 2017-10-19 13:38 Matej Košík
  2017-10-19 14:16 ` vrotaru.md
  2017-10-19 14:34 ` Gabriel Scherer
  0 siblings, 2 replies; 9+ messages in thread
From: Matej Košík @ 2017-10-19 13:38 UTC (permalink / raw)
  To: caml-list


[-- Attachment #1.1: Type: text/plain, Size: 683 bytes --]

Hi,

I am trying to do simple pattern matching of these values:
https://github.com/ocaml/ocaml/blob/trunk/parsing/parsetree.mli#L145

What I would like to do is:

   | [Rtag the_whole_4_tuple] ->
       the_whole_4_tuple

However, when I try to do that, I am getting:

  Error: The constructor Rtag expects 4 argument(s),
         but is applied here to 1 argument(s)

This:

    | [Rtag (f1,f2,f3,f4)] ->
        f1,f2,f3,f4

of course works but (regardless of the chosen bound variable names), it looks amateurish.

What's the right way to do this?
(I would like just to bind a 4-tuple and then return it)

(Apologies in advance for a stupid question.)


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Caml-list] beginner question about pattern matching
  2017-10-19 13:38 [Caml-list] beginner question about pattern matching Matej Košík
@ 2017-10-19 14:16 ` vrotaru.md
  2017-10-19 14:24   ` Matej Košík
  2017-10-19 14:34 ` Gabriel Scherer
  1 sibling, 1 reply; 9+ messages in thread
From: vrotaru.md @ 2017-10-19 14:16 UTC (permalink / raw)
  To: Matej Košík; +Cc: caml-list

[-- Attachment #1: Type: text/plain, Size: 844 bytes --]

[ Rtag (_,_,_,_) as rtag] -> rtag

On Thu, Oct 19, 2017, 16:39 Matej Košík <mail@matej-kosik.net> wrote:

> Hi,
>
> I am trying to do simple pattern matching of these values:
> https://github.com/ocaml/ocaml/blob/trunk/parsing/parsetree.mli#L145
>
> What I would like to do is:
>
>    | [Rtag the_whole_4_tuple] ->
>        the_whole_4_tuple
>
> However, when I try to do that, I am getting:
>
>   Error: The constructor Rtag expects 4 argument(s),
>          but is applied here to 1 argument(s)
>
> This:
>
>     | [Rtag (f1,f2,f3,f4)] ->
>         f1,f2,f3,f4
>
> of course works but (regardless of the chosen bound variable names), it
> looks amateurish.
>
> What's the right way to do this?
> (I would like just to bind a 4-tuple and then return it)
>
> (Apologies in advance for a stupid question.)
>
>

[-- Attachment #2: Type: text/html, Size: 1286 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Caml-list] beginner question about pattern matching
  2017-10-19 14:16 ` vrotaru.md
@ 2017-10-19 14:24   ` Matej Košík
  2017-10-19 14:29     ` vrotaru.md
  2017-10-19 14:31     ` Alan Schmitt
  0 siblings, 2 replies; 9+ messages in thread
From: Matej Košík @ 2017-10-19 14:24 UTC (permalink / raw)
  To: vrotaru.md; +Cc: caml-list


[-- Attachment #1.1: Type: text/plain, Size: 1303 bytes --]

On 10/19/2017 04:16 PM, vrotaru.md@gmail.com wrote:
> [ Rtag (_,_,_,_) as rtag] -> rtag

That is certainly possible.
It is equivalent to:

  | [rtag] -> rtag

but that's not what I am trying to do.  :-/

Instead of the whole

  Rtag (something1, something2, something3, something4)

I would like to bind just the 4-tuple
(without the Rtag label).

> 
> 
> On Thu, Oct 19, 2017, 16:39 Matej Košík <mail@matej-kosik.net <mailto:mail@matej-kosik.net>> wrote:
> 
>     Hi,
> 
>     I am trying to do simple pattern matching of these values:
>     https://github.com/ocaml/ocaml/blob/trunk/parsing/parsetree.mli#L145
> 
>     What I would like to do is:
> 
>        | [Rtag the_whole_4_tuple] ->
>            the_whole_4_tuple
> 
>     However, when I try to do that, I am getting:
> 
>       Error: The constructor Rtag expects 4 argument(s),
>              but is applied here to 1 argument(s)
> 
>     This:
> 
>         | [Rtag (f1,f2,f3,f4)] ->
>             f1,f2,f3,f4
> 
>     of course works but (regardless of the chosen bound variable names), it looks amateurish.
> 
>     What's the right way to do this?
>     (I would like just to bind a 4-tuple and then return it)
> 
>     (Apologies in advance for a stupid question.)
> 


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Caml-list] beginner question about pattern matching
  2017-10-19 14:24   ` Matej Košík
@ 2017-10-19 14:29     ` vrotaru.md
  2017-10-19 14:30       ` Olivier Nicole
  2017-10-19 14:31     ` Alan Schmitt
  1 sibling, 1 reply; 9+ messages in thread
From: vrotaru.md @ 2017-10-19 14:29 UTC (permalink / raw)
  To: Matej Košík; +Cc: caml-list

[-- Attachment #1: Type: text/plain, Size: 1520 bytes --]

Rtag ((_,_,_,_) as t4) -> t4

Will this work? Writing from the phone

On Thu, Oct 19, 2017, 17:24 Matej Košík <mail@matej-kosik.net> wrote:

> On 10/19/2017 04:16 PM, vrotaru.md@gmail.com wrote:
> > [ Rtag (_,_,_,_) as rtag] -> rtag
>
> That is certainly possible.
> It is equivalent to:
>
>   | [rtag] -> rtag
>
> but that's not what I am trying to do.  :-/
>
> Instead of the whole
>
>   Rtag (something1, something2, something3, something4)
>
> I would like to bind just the 4-tuple
> (without the Rtag label).
>
> >
> >
> > On Thu, Oct 19, 2017, 16:39 Matej Košík <mail@matej-kosik.net <mailto:
> mail@matej-kosik.net>> wrote:
> >
> >     Hi,
> >
> >     I am trying to do simple pattern matching of these values:
> >     https://github.com/ocaml/ocaml/blob/trunk/parsing/parsetree.mli#L145
> >
> >     What I would like to do is:
> >
> >        | [Rtag the_whole_4_tuple] ->
> >            the_whole_4_tuple
> >
> >     However, when I try to do that, I am getting:
> >
> >       Error: The constructor Rtag expects 4 argument(s),
> >              but is applied here to 1 argument(s)
> >
> >     This:
> >
> >         | [Rtag (f1,f2,f3,f4)] ->
> >             f1,f2,f3,f4
> >
> >     of course works but (regardless of the chosen bound variable names),
> it looks amateurish.
> >
> >     What's the right way to do this?
> >     (I would like just to bind a 4-tuple and then return it)
> >
> >     (Apologies in advance for a stupid question.)
> >
>
>

[-- Attachment #2: Type: text/html, Size: 2357 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Caml-list] beginner question about pattern matching
  2017-10-19 14:29     ` vrotaru.md
@ 2017-10-19 14:30       ` Olivier Nicole
  0 siblings, 0 replies; 9+ messages in thread
From: Olivier Nicole @ 2017-10-19 14:30 UTC (permalink / raw)
  To: caml-list

Hello,

On 10/19/2017 04:29 PM, vrotaru.md@gmail.com wrote:
> Rtag ((_,_,_,_) as t4) -> t4
> 
> Will this work? Writing from the phone

No, this will complain that the Rtag constructor expects 4 arguments.
I would say that what you are trying to do is not possible, but I'm not
absolutely certain.

> 
> 
> On Thu, Oct 19, 2017, 17:24 Matej Košík <mail@matej-kosik.net
> <mailto:mail@matej-kosik.net>> wrote:
> 
>     On 10/19/2017 04:16 PM, vrotaru.md@gmail.com
>     <mailto:vrotaru.md@gmail.com> wrote:
>     > [ Rtag (_,_,_,_) as rtag] -> rtag
> 
>     That is certainly possible.
>     It is equivalent to:
> 
>       | [rtag] -> rtag
> 
>     but that's not what I am trying to do.  :-/
> 
>     Instead of the whole
> 
>       Rtag (something1, something2, something3, something4)
> 
>     I would like to bind just the 4-tuple
>     (without the Rtag label).
> 
>     >
>     >
>     > On Thu, Oct 19, 2017, 16:39 Matej Košík <mail@matej-kosik.net
>     <mailto:mail@matej-kosik.net> <mailto:mail@matej-kosik.net
>     <mailto:mail@matej-kosik.net>>> wrote:
>     >
>     >     Hi,
>     >
>     >     I am trying to do simple pattern matching of these values:
>     >   
>      https://github.com/ocaml/ocaml/blob/trunk/parsing/parsetree.mli#L145
>     >
>     >     What I would like to do is:
>     >
>     >        | [Rtag the_whole_4_tuple] ->
>     >            the_whole_4_tuple
>     >
>     >     However, when I try to do that, I am getting:
>     >
>     >       Error: The constructor Rtag expects 4 argument(s),
>     >              but is applied here to 1 argument(s)
>     >
>     >     This:
>     >
>     >         | [Rtag (f1,f2,f3,f4)] ->
>     >             f1,f2,f3,f4
>     >
>     >     of course works but (regardless of the chosen bound variable
>     names), it looks amateurish.
>     >
>     >     What's the right way to do this?
>     >     (I would like just to bind a 4-tuple and then return it)
>     >
>     >     (Apologies in advance for a stupid question.)
>     >
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Caml-list] beginner question about pattern matching
  2017-10-19 14:24   ` Matej Košík
  2017-10-19 14:29     ` vrotaru.md
@ 2017-10-19 14:31     ` Alan Schmitt
  1 sibling, 0 replies; 9+ messages in thread
From: Alan Schmitt @ 2017-10-19 14:31 UTC (permalink / raw)
  To: Matej Košík; +Cc: vrotaru.md, caml-list

[-- Attachment #1: Type: text/plain, Size: 517 bytes --]

On 2017-10-19 16:24, Matej Košík <mail@matej-kosik.net> writes:

> Instead of the whole
>
>   Rtag (something1, something2, something3, something4)
>
> I would like to bind just the 4-tuple
> (without the Rtag label).

I think it is not possible because the memory layout is not the same
(you need to destructure the Rtag block and create a new block for the
tuple).

Best,

Alan

-- 
OpenPGP Key ID : 040D0A3B4ED2E5C7
Monthly Athmospheric CO₂, Mauna Loa Obs. 2017-09: 403.38, 2016-09: 401.03

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Caml-list] beginner question about pattern matching
  2017-10-19 13:38 [Caml-list] beginner question about pattern matching Matej Košík
  2017-10-19 14:16 ` vrotaru.md
@ 2017-10-19 14:34 ` Gabriel Scherer
  2017-10-19 14:40   ` Matej Košík
  2017-10-19 14:44   ` vrotaru.md
  1 sibling, 2 replies; 9+ messages in thread
From: Gabriel Scherer @ 2017-10-19 14:34 UTC (permalink / raw)
  To: Matej Košík; +Cc: caml users

This is a small hiccup with the OCaml (non-revised) syntax:

  | Foo of bar * baz * blah

and

  | Foo of (bar * baz * blah)

are not equivalent, and only the latter allows to do what you want.


On Thu, Oct 19, 2017 at 3:38 PM, Matej Košík <mail@matej-kosik.net> wrote:
> Hi,
>
> I am trying to do simple pattern matching of these values:
> https://github.com/ocaml/ocaml/blob/trunk/parsing/parsetree.mli#L145
>
> What I would like to do is:
>
>    | [Rtag the_whole_4_tuple] ->
>        the_whole_4_tuple
>
> However, when I try to do that, I am getting:
>
>   Error: The constructor Rtag expects 4 argument(s),
>          but is applied here to 1 argument(s)
>
> This:
>
>     | [Rtag (f1,f2,f3,f4)] ->
>         f1,f2,f3,f4
>
> of course works but (regardless of the chosen bound variable names), it looks amateurish.
>
> What's the right way to do this?
> (I would like just to bind a 4-tuple and then return it)
>
> (Apologies in advance for a stupid question.)
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Caml-list] beginner question about pattern matching
  2017-10-19 14:34 ` Gabriel Scherer
@ 2017-10-19 14:40   ` Matej Košík
  2017-10-19 14:44   ` vrotaru.md
  1 sibling, 0 replies; 9+ messages in thread
From: Matej Košík @ 2017-10-19 14:40 UTC (permalink / raw)
  To: caml-list


[-- Attachment #1.1: Type: text/plain, Size: 1415 bytes --]

Ok. Thank you all. I suspected as much but I wanted to check with someone else.

(Adding a note about n+1-st note about Ocaml quirks and moving on.)

    (* NOTE: This looks bad, but Ocaml (4.06 beta) does not allow me to do any better *)
    | [Rtag (f1,f2,f3,f4)] ->
         f1,f2,f3,f4

On 10/19/2017 04:34 PM, Gabriel Scherer wrote:
> This is a small hiccup with the OCaml (non-revised) syntax:
> 
>   | Foo of bar * baz * blah
> 
> and
> 
>   | Foo of (bar * baz * blah)
> 
> are not equivalent, and only the latter allows to do what you want.
> 
> 
> On Thu, Oct 19, 2017 at 3:38 PM, Matej Košík <mail@matej-kosik.net> wrote:
>> Hi,
>>
>> I am trying to do simple pattern matching of these values:
>> https://github.com/ocaml/ocaml/blob/trunk/parsing/parsetree.mli#L145
>>
>> What I would like to do is:
>>
>>    | [Rtag the_whole_4_tuple] ->
>>        the_whole_4_tuple
>>
>> However, when I try to do that, I am getting:
>>
>>   Error: The constructor Rtag expects 4 argument(s),
>>          but is applied here to 1 argument(s)
>>
>> This:
>>
>>     | [Rtag (f1,f2,f3,f4)] ->
>>         f1,f2,f3,f4
>>
>> of course works but (regardless of the chosen bound variable names), it looks amateurish.
>>
>> What's the right way to do this?
>> (I would like just to bind a 4-tuple and then return it)
>>
>> (Apologies in advance for a stupid question.)
>>
> 


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Caml-list] beginner question about pattern matching
  2017-10-19 14:34 ` Gabriel Scherer
  2017-10-19 14:40   ` Matej Košík
@ 2017-10-19 14:44   ` vrotaru.md
  1 sibling, 0 replies; 9+ messages in thread
From: vrotaru.md @ 2017-10-19 14:44 UTC (permalink / raw)
  To: Gabriel Scherer; +Cc: Matej Košík, caml users

[-- Attachment #1: Type: text/plain, Size: 1551 bytes --]

I see, where I was wrong. But if the goal is to avoid allocation then
something like

[ Rtag (x, y, z, w)] -> somefn x y z w

will work

On Thu, Oct 19, 2017, 17:35 Gabriel Scherer <gabriel.scherer@gmail.com>
wrote:

> This is a small hiccup with the OCaml (non-revised) syntax:
>
>   | Foo of bar * baz * blah
>
> and
>
>   | Foo of (bar * baz * blah)
>
> are not equivalent, and only the latter allows to do what you want.
>
>
> On Thu, Oct 19, 2017 at 3:38 PM, Matej Košík <mail@matej-kosik.net> wrote:
> > Hi,
> >
> > I am trying to do simple pattern matching of these values:
> > https://github.com/ocaml/ocaml/blob/trunk/parsing/parsetree.mli#L145
> >
> > What I would like to do is:
> >
> >    | [Rtag the_whole_4_tuple] ->
> >        the_whole_4_tuple
> >
> > However, when I try to do that, I am getting:
> >
> >   Error: The constructor Rtag expects 4 argument(s),
> >          but is applied here to 1 argument(s)
> >
> > This:
> >
> >     | [Rtag (f1,f2,f3,f4)] ->
> >         f1,f2,f3,f4
> >
> > of course works but (regardless of the chosen bound variable names), it
> looks amateurish.
> >
> > What's the right way to do this?
> > (I would like just to bind a 4-tuple and then return it)
> >
> > (Apologies in advance for a stupid question.)
> >
>
> --
> Caml-list mailing list.  Subscription management and archives:
> https://sympa.inria.fr/sympa/arc/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs

[-- Attachment #2: Type: text/html, Size: 2476 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2017-10-19 14:44 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-19 13:38 [Caml-list] beginner question about pattern matching Matej Košík
2017-10-19 14:16 ` vrotaru.md
2017-10-19 14:24   ` Matej Košík
2017-10-19 14:29     ` vrotaru.md
2017-10-19 14:30       ` Olivier Nicole
2017-10-19 14:31     ` Alan Schmitt
2017-10-19 14:34 ` Gabriel Scherer
2017-10-19 14:40   ` Matej Košík
2017-10-19 14:44   ` vrotaru.md

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).