Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Jean.Luc.Paillet@lim.univ-mrs.fr
To: caml-list@inria.fr
Subject: sequencing
Date: Tue, 3 Jun 1997 10:04:55 +0100	[thread overview]
Message-ID: <9706030959.AA15419@gyptis.univ-mrs.fr> (raw)

   Quelqu'un pourrait-il m'expliquer pourquoi le sequencement d'une fonction
a` effet de bord, telle que "print_string" par exemple, semble inverse'
quand elle est appliquée sur une liste au moyen d'un iterateur.

Par exemple
   map print_string ["a" ; "b"] ;;   produit

    ba- : unit list = [(); ()]
ce qui implique un parcours de la liste de droite a gauche .
Plus curieux, avec une definition recursive "personnelle" de l'iterateur,
telle que

   let rec monmap f liste      match liste  with [] -> [] |
                     head :: tail -> (f head) :: monmap f (tail) ;;

On pourrait s'attendre ici a ce que  "(f head)" soit evalue avant
l'appel recursif. He bien non,
 on obtient encore

   monmap print_string ["a" ; "b"] ;;
    ba- : unit list = [(); ()]

Quelle est mon erreur d'interpretation ?
Doit-on penser que  (f head) est empile jusqu'a ce que la fonction termine ?

   ?????
**********************************************
££  English version  ££

I don't understand why the sequencing of side effects seems to be inverted,
when using "map" , like for example in the following:

     map print_string ["a" ; "b"] ;;   gives
    ba- : unit list = [(); ()]

it means that the list is scanned from the right to the left

More surprising, with a recursive hand made definition of "map", such as

   let rec monmap f liste      match liste  with [] -> [] |
                     head :: tail -> (f head) :: monmap f (tail) ;;


We also obtain

   monmap print_string ["a" ; "b"] ;;
    ba- : unit list = [(); ()]

We could thing that   "(f head)" is evaluated before the recursive call .

What is my mistake ?
Does the term "(f head)" pushed on the recursion stack until terminating
the recursive calls, before being evaluated ?


   Thanks for an explanation

    Kind regards


        Jean-Luc Paillet

(*
------------------------------------------------------------------------
              Jean-Luc PAILLET
              LIM  (URA 1787)
              CMI -   Universite de Provence
              39 r Joliot Curie
              13453  Marseille  Cedex 13   FRANCE
              Tel:  (33) 04 91 11 36 10
              Fax:  (33) 04 91 11 36 02
              e-mail:  Jean.Luc.Paillet@lim.univ-mrs.fr
                       jluc@gyptis.univ-mrs.fr
--------------------------------------------------------------------------
*)







             reply	other threads:[~1997-06-03 10:26 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-06-03  9:04 Jean.Luc.Paillet [this message]
1997-06-03 11:14 ` sequencing Francois Pessaux
1997-06-03 11:15 ` sequencing Jean-Christophe Filliatre
1997-06-03 11:56 ` sequencing Michel Quercia
1997-06-03 14:47 ` sequencing Vincent Poirriez

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=9706030959.AA15419@gyptis.univ-mrs.fr \
    --to=jean.luc.paillet@lim.univ-mrs.fr \
    --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