From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: weis Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id MAA29117 for caml-redistribution; Tue, 3 Jun 1997 12:04:40 +0200 (MET DST) Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id JAA27120 for ; Tue, 3 Jun 1997 09:41:20 +0200 (MET DST) Received: from pulsar.univ-valenciennes.fr (pulsar.univ-valenciennes.fr [193.50.192.1]) by nez-perce.inria.fr (8.8.5/8.7.3) with ESMTP id JAA18959; Tue, 3 Jun 1997 09:41:13 +0200 (MET DST) Received: from titan.univ-valenciennes.fr (titan.univ-valenciennes.fr [193.50.192.38]) by pulsar.univ-valenciennes.fr (8.7.3/jtpda-5.1) with SMTP id JAA14814 ; Tue, 3 Jun 1997 09:48:52 +0200 (MET DST) Received: from titan (localhost) by titan.univ-valenciennes.fr (5.x/SMI-SVR4) id AA03107; Tue, 3 Jun 1997 09:37:41 +0100 Message-Id: <3393D7D4.2F33@univ-valenciennes.fr> Date: Tue, 03 Jun 1997 09:37:40 +0100 From: Vincent Poirriez Organization: limav X-Mailer: Mozilla 3.01Gold (X11; I; SunOS 5.4 sun4m) Mime-Version: 1.0 To: Pierre Weis Cc: Pascal Zimmer , caml-list@inria.fr Subject: Re: Instruction return References: <199706021415.QAA21013@pauillac.inria.fr> Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Sender: weis > > > Serait-il possible d'ajouter une instruction return au langage CAML afin > > de pouvoir sortir directement d'une boucle, > ... Je souscrit a la réponse de Pierre Weis >C'est pourquoi on pre'fe`re alors conside'rer que la >boucle est trop complexe pour une boucle for ou while et qu'il est >temps d'utiliser des outils adapte's a` e'crire des boucles >arbitrairement complexes, c'est-a`-dire les fonctions re'cursives. Cependant, j'ai rencontré la situation suivante dans un contexte où l'efficacité (à l'exécution) est essentielle. Trouver l'indice du premier élément d'un tableau qui vérifie un prédicat p, s'il y en a un. Ce code étant compile avec l'option -unsafe, je ne peux pas compter sur les test de débordement des primitives Array.get ... Le choix d'utiliser Array.unsafe_get serait inutile si j'inclus ce test de débordement dans la condition du while ou de la fonction récursive ainsi: let find p a = let l = Array.length a in let i = ref 0 in while !i i Si l'on veut sortir d'une boucle for avant sa fin normale, en admettant que ce soit justifié (while ou fonction récursive exclue) , la valeur de sortie du compteur suffit. English short version: I agree with Pierre Weis: >In fact the best way of writing complex loops is via recursive >function definitions: But, due to runtime efficiency considerations I had to make the following choice. I want to find the index of the first item of an array which verifies a predicat p, if one exists. It is useless to prefer Array.unsafe_get if I add the test in the while (or recursive) condition as below: let find p a = let l = Array.length a in let i = ref 0 in while !i i When I want to exit a loop for before its natural end, when I really need it, it is sufficient to return the value of the count when I exit Vincent Poirriez -- Tel: (33) {0}3 27 14 13 33 Fax: (33) {0}3 27 14 12 94 mailto:Vincent.Poirriez@univ-valenciennes.fr http://www.univ-valenciennes.fr/limav/poirriez ISTV Université de Valenciennes Le Mont Houy BP 311 F59304 Valenciennes CEDEX