caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Max Kirillov <max630@mail.ru>
To: caml-list@inria.fr
Subject: Re: [Caml-list] static variables in a function
Date: Sat, 15 Jun 2002 21:51:24 +0700	[thread overview]
Message-ID: <20020615215124.C1425@max.home> (raw)
In-Reply-To: <864rg5oxpo.fsf@laurelin.dementia.org>; from j.prevost@cs.cmu.edu on Sat, Jun 15, 2002 at 02:36:03AM -0400

Oh, thank you for clarification. I'm very new to functional
programming, and didn't know yet about tricks like this. As
I understand, the point was to call 'ref' at initialization
stage. I thought about using 'lazy' for that, but still
placed it inside a full function definition, so it didn't
help.

This makes a possibility to write very funny
functions. For example:

# let acc v =
    let vR = ref v in
    fun f -> 
            let newV = f !vR in
          vR := newV;
          newV  ;;
val acc : 'a -> ('a -> 'a) -> 'a = <fun>
# let f1 = acc 12;;
val f1 : (int -> int) -> int = <fun>
# f1 ((+) 1);;
- : int = 13
# f1 ((+) 1);;
- : int = 14
# f1 ((+) 1);;
- : int = 15
# f1 ((+) 1);;
- : int = 16
# f1 ((+) 1);;
- : int = 17
# let f2 = acc "hello";;
val f2 : (string -> string) -> string = <fun>
# f2 ((^) " a");;       
- : string = " ahello"
# f2 ((^) " b");;
- : string = " b ahello"
# f2 ((^) " c");;
- : string = " c b ahello"

I'm not sure if this style of coding better than placing the
mutable values to be hidden inside modules or classes. Even
when possible (in other languages), I prefer to use
latter way to do. Well it's a matter of taste.

Max.

On Sat, Jun 15, 2002 at 02:36:03AM -0400, John Prevost wrote:
>>>>>> "mk" == Max Kirillov <max630@mail.ru> writes:
> 
>mk> Hello.  The code you write will generate a new (empty) ref at
>mk> every call.
> 
> Actually, it won't.  Take a look at the code that was sent by Yutaka OIWA:
> 
> let get_chunk =
>   let chunks_list = ref [] in
>   fun () ->
>     ...
> 
> The ref is bound outside of the function definition, so it's created
> once and kept in the closure, not allocated in each call. 
<...>
> Your version also works, but creates a module-level binding for the
> value as well, which isn't desirable for something like this, where
> you want the value to be local to the function definition.
> 
> John.
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


  reply	other threads:[~2002-06-15 14:55 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-06-14 17:08 Shannon --jj Behrens
2002-06-14 17:40 ` Stefano Zacchiroli
2002-06-14 17:58 ` Yutaka OIWA
2002-06-14 20:43   ` Shannon --jj Behrens
2002-06-15  4:42   ` Max Kirillov
2002-06-15  6:36     ` John Prevost
2002-06-15 14:51       ` Max Kirillov [this message]
2002-06-15 16:14         ` John Prevost
2002-06-15 19:19           ` Max Kirillov
2002-06-15 23:16             ` John Prevost
2002-06-16 23:19             ` Remi VANICAT
2002-06-17 13:56               ` [Caml-list] Memoizing (was: static variables...) Benedikt Rosenau
2002-06-18  8:40                 ` William Lovas
2002-06-18  9:16                   ` Jacek Chrzaszcz
2002-06-18 21:52                     ` William Lovas
2002-06-18 13:07                   ` Christopher Quinn
2002-06-18 14:07                     ` Remi VANICAT
2002-06-18 17:52                       ` Christopher Quinn
2002-06-19 14:42                   ` John Max Skaller
2002-06-23 21:18                     ` Pierre Weis
2002-06-19  4:38   ` [Caml-list] static variables in a function Shannon --jj Behrens

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=20020615215124.C1425@max.home \
    --to=max630@mail.ru \
    --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;
as well as URLs for NNTP newsgroup(s).