Re: sequencing

From: Francois Pessaux (pessaux@pauillac.inria.fr)
Date: Tue Jun 03 1997 - 13:14:00 MET DST


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ée 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 = 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 = function
    [] -> []
  | h :: q -> let r = 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) *)
;;



This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:11 MET