Re: sequencing

Francois Pessaux (pessaux@pauillac.inria.fr)
Tue, 03 Jun 1997 13:14:00 +0200

Message-Id: <199706031114.NAA29905@pauillac.inria.fr>
To: Jean.Luc.Paillet@lim.univ-mrs.fr
Subject: Re: sequencing
Date: Tue, 03 Jun 1997 13:14:00 +0200
From: Francois Pessaux <pessaux@pauillac.inria.fr>

> Quelqu'un pourrait-il m'expliquer pourquoi le sequencement d'une fon=
ction
> a` effet de bord, telle que "print_string" par exemple, semble inverse'=

> quand elle est appliqu=E9e sur une liste au moyen d'un iterateur.

Il se trouve que l'ordre d'evaluation (droite-gauche ou gauche-droite) n'=
est
pas specifie pour le compilo Caml. Autrement dit, il ne faut pas compter =
sur
un ordre particulier pour faire un programme correct. Sur la version de C=
aml
que tu utilise l'evaluation doit vraissemblablement se faire de droite a
gauche et la fonction map doit etre definie comme :
let rec map f =3D function
| [] -> []
| h :: q -> (f h) :: (map f q) ;;

Pour patcher ca, et ne plus etre dependant de l'ordre d'evaluation, il fa=
ut
effectuer explicitement le calcul de f h en premier :
let rec map f =3D function
[] -> []
| h :: q -> let r =3D f a
in r :: map f q ;;

C'est d'ailleurs comme ca qu'est codee map en Objective Caml.

-- =

(* Francois PESSAUX (Francois.Pessaux@inria.fr) *)
(* INRIA Rocquencourt - Projet CRISTAL *)
(* (http://pauillac.inria.fr/~pessaux) *)
;;