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 WAA13571; Tue, 18 Feb 2003 22:03:08 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: (from xleroy@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id WAA13570 for caml-list@pauillac.inria.fr; Tue, 18 Feb 2003 22:03:08 +0100 (MET) 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 AAA18378 for ; Tue, 18 Feb 2003 00:03:07 +0100 (MET) Received: from ep09.kernel.pl (ep09.kernel.pl [212.87.11.162]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id h1HN36P03756 for ; Tue, 18 Feb 2003 00:03:06 +0100 (MET) Received: (qmail 16594 invoked by uid 566); 17 Feb 2003 23:03:03 -0000 Date: Tue, 18 Feb 2003 00:00:47 +0100 From: Michal Moskal To: OCaml List Subject: Re: [Caml-list] Re: "ocaml_beginners"::[] string to list Message-ID: <20030217230047.GA32201@roke.freak> References: <20030217222143.GH84038@merkur.cert.siemens.de> <3E5167D3.8060203@ucdavis.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3E5167D3.8060203@ucdavis.edu> User-Agent: Mutt/1.4i X-PGP-Fingerprint: CF89 1B14 11BE 1CC9 2CA3 7497 5E32 69B4 BC71 B4C2 X-AntiVirus: scanned for viruses by AMaViS 0.2.1 (http://amavis.org/) Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk On Mon, Feb 17, 2003 at 02:53:07PM -0800, Issac Trotts wrote: > Christian Schaller wrote: > > >Hi everyone! > > > >I'm trying to find a built in function for converting a string to a list of > >characters, similar to SML's explode. Is something like this available? > > > >Thank you! > > > >- Chris > > > # let explode s = > let n = String.length s in > let rec aux k = if k = n then [] else s.[k] :: aux (k+1) in > aux 0;; > val explode : string -> char list = > # explode "foo";; > - : char list = ['f'; 'o'; 'o'] Not tail recursive :) >>From my patch to pleac (http://pleac.sourceforge.net): (* convert string to list of chars *) let explode s = let rec f acc = function | -1 -> acc | k -> f (s.[k] :: acc) (k - 1) in f [] (String.length s - 1) (* convert list of chars to string *) let implode l = let s = String.create (List.length l) in let rec f n = function | x :: xs -> s.[n] <- x; f (n + 1) xs | [] -> s in f 0 l PS: I know, it doesn't matter much if it's tail recursive or not, nobody is going to use for data of size when it matters :-) -- : Michal Moskal ::::: malekith/at/pld-linux.org : GCS {C,UL}++++$ a? !tv : PLD Linux ::::::: Wroclaw University, CS Dept : {E-,w}-- {b++,e}>+++ h ------------------- 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