From: Jean.Luc.Paillet@lim.univ-mrs.fr
Message-Id: <9706030959.AA15419@gyptis.univ-mrs.fr>
Date: Tue, 3 Jun 1997 10:04:55 +0100
To: caml-list@inria.fr
Subject: sequencing
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 ?
?????
**********************************************
=A3=A3 English version =A3=A3
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
--------------------------------------------------------------------------
*)
This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:11 MET