Home     About     Download     Resources     Contact us

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at ocaml.org.

Browse thread
sequencing
• Jean.Luc.Paillet@l...
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
 Date: 1997-06-03 (10:26) From: Jean.Luc.Paillet@l... 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 ?

?????
**********************************************
££  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
--------------------------------------------------------------------------
*)

```