From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id QAA29534; Tue, 17 Aug 2004 16:56:56 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f 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 QAA28117 for ; Tue, 17 Aug 2004 16:56:55 +0200 (MET DST) Received: from annexia.force9.co.uk (annexia.force9.co.uk [212.56.101.183]) by nez-perce.inria.fr (8.12.10/8.12.10) with ESMTP id i7HEusmL008983 for ; Tue, 17 Aug 2004 16:56:54 +0200 Received: from rich by annexia.force9.co.uk with local (Exim 3.36 #1 (Debian)) id 1Bx5OP-0003FR-00 for ; Tue, 17 Aug 2004 15:56:53 +0100 Date: Tue, 17 Aug 2004 15:56:53 +0100 Cc: Caml Mailing List Subject: Re: [Caml-list] Are map and iter guaranteed to be called in forwards order? Message-ID: <20040817145653.GA12345@annexia.org> References: <20040817120053.GA9749@annexia.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.5.1+cvs20040105i From: Richard Jones X-Miltered: at nez-perce with ID 41221CB6.001 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Loop: caml-list@inria.fr X-Spam: no; 0.00; caml-list:01 'g':01 val:01 char:01 'g':01 val:01 incr:01 char:01 type-safe:01 ltd:98 caml:01 caml:01 int:01 int:01 it'd:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk This came up because I wanted a sensible way to number a list of items. The obvious imperative approach is: # let items = ['a';'c';'e';'g';'i'];; val items : char list = ['a'; 'c'; 'e'; 'g'; 'i'] # let i = ref 0;; val i : int ref = {contents = 0} # let items = List.map (fun item -> let n = !i in incr i; n, item) items;; val items : (int * char) list = [(0, 'a'); (1, 'c'); (2, 'e'); (3, 'g'); (4, 'i')] The functional approach is comparatively long-winded: you have to effectively write your own loop explicitly, and the obvious way to write it isn't tail recursive, so you have to do it with accumulators. It'd be nicer to have a library HOF to do this. Rich. -- Richard Jones. http://www.annexia.org/ http://www.j-london.com/ Merjis Ltd. http://www.merjis.com/ - improving website return on investment MOD_CAML lets you run type-safe Objective CAML programs inside the Apache webserver. http://www.merjis.com/developers/mod_caml/ ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners