Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Francois Berenger <berenger@riken.jp>
To: caml-list@inria.fr
Subject: Re: [Caml-list] Pattern matching on refs
Date: Fri, 11 Oct 2013 15:10:19 +0900	[thread overview]
Message-ID: <5257964B.5020508@riken.jp> (raw)
In-Reply-To: <CAMoPVjfUxErjpYA1BcJvkK5==uBaS0dn-cn=TGbdZWWK_nJ=Sw@mail.gmail.com>

On 10/11/2013 01:49 PM, Arnaud Spiwack wrote:
> If you need queues with random access, and do not need highly tuned
> performances, may I suggest you having a look at Okasaki's /Purely
> functional datastructures/.

There are several OCaml implementations available.
I know this one (and have seen others here and there also):

https://bitbucket.org/mmottl/pure-fun

 > It has a handful of these, which do not
> involve assignment (they use laziness annotation, though, for good
> amortized performances). It would make your life better. The book
> version has a little more than the thesis, by the way.
>
>
> On 10 October 2013 21:46, Yotam Barnoy <yotambarnoy@gmail.com
> <mailto:yotambarnoy@gmail.com>> wrote:
>
>     D'oh! I always forget about mutable fields somehow. Refs just take
>     over in my mind and I end up putting them everywhere I need
>     mutability. Shows how little I actually use mutability in ocaml.
>
>     And the reason for the linked lists is that I need a
>     (low-performance) queue/stack with random access. And the reason for
>     implementing a doubly-linked list myself is that my advisor is
>     against using any library that's not part of the ocaml distribution.
>
>     Sorry for the disturbance folks. Move along!
>
>     -Yotam
>
>
>     On Thu, Oct 10, 2013 at 3:42 PM, David Allsopp
>     <dra-news@metastack.com <mailto:dra-news@metastack.com>> wrote:
>
>         Yotam Barnoy wrote:
>          > I recently found out how ugly it is to pattern-match on a ref,
>          > using {contents=...}. This should be extremely easy to fix in
>          > the parser. Can it please be put into the next version of ocaml?
>
>         I imagine there are those who might suggest that the ugliness of
>         pattern matching on refs is part of the discouragement against
>         using them!
>
>          > match x with
>          > | ref y -> ...
>
>         I'm guessing that you're really pattern matching with refs
>         inside tuples or something which makes using !x impractical?
>         That said, if you've ended with up (foo, bar, baz) where at
>         least one of those is a reference, why not consider using
>         records with mutable fields?
>
>         While writing this, Yotam Barnoy wrote:
>          > It wouldn't solve the problem, because in reality
>          > I'm matching something like this piece of code
>          > implementing a doubly-linked list:
>          >
>          > type 'a cell = { data : 'a;
>          >                 next : 'a link ref;
>          >                 last : 'a link ref;
>          >               }
>
>         Completely ignoring why you might be implementing linked lists
>         in a list-processing language (I'm sure there's a good reason!),
>         why not have
>
>         type 'a cell = {data: 'a;
>                          next: mutable 'a link;
>                          last: mutable 'link}
>
>         ?
>
>         The parser change you propose is probably not trivial - for a
>         start, "ref" is part of the Pervasives module, not part of the
>         grammar, and [ref] itself can be redefined (try [let ref x = x]
>         in the toplevel). Putting something into the grammar to allow
>         pattern matching on ref like this would at best be a grim hack.
>
>
>         David
>
>         --
>         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
>
>
>


-- 
Best regards,
Francois Berenger.

  reply	other threads:[~2013-10-11  6:11 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-10 19:17 Yotam Barnoy
2013-10-10 19:34 ` Ashish Agarwal
2013-10-10 19:37   ` Yotam Barnoy
2013-10-10 19:42 ` David Allsopp
2013-10-10 19:46   ` Yotam Barnoy
2013-10-11  4:49     ` Arnaud Spiwack
2013-10-11  6:10       ` Francois Berenger [this message]
2013-10-10 20:23 ` Jacques Le Normand

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=5257964B.5020508@riken.jp \
    --to=berenger@riken.jp \
    --cc=caml-list@inria.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