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 UAA20116; Tue, 22 Apr 2003 20:43:47 +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 UAA20159 for ; Tue, 22 Apr 2003 20:43:46 +0200 (MET DST) Received: from gis.net (mx05.gis.net [208.218.130.13]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id h3KLtP902844 for ; Sun, 20 Apr 2003 23:55:25 +0200 (MET DST) Received: from gis.net ([208.218.130.24]) by mx05.gis.net; Sun, 20 Apr 2003 17:55:24 -0400 From: "Ryan Bastic" Reply-to: rbastic@gis.net To: caml-list@inria.fr Subject: [Caml-list] Clarification of original post [still having problems] X-Mailer: Galaxy AstroMail used by rbastic X-Originating-IP: 209.244.132.218 Date: Sun, 20 Apr 2003 17:55:23 -0400 Message-id: <3ea3174b.37b7.27531@gis.net> X-Rcpt-To: X-Spam: no; 0.00; gis:99 newbie:01 confuses:01 experimented:01 figuring:01 arrays:01 semantics:01 ocaml:01 rec:01 toplevel:01 failing:02 elegant:04 let:04 group:04 parse:04 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Can anyone take some time and help a struggling newbie out? :-( This stuff is still failing to parse right for my brain. ----- Original Message Follows ----- > Hello all, > A few weeks ago I posted a message asking how to create a program in > OCaml to shuffle vector of strings into an array of arrays. Had some > problems understanding how to do it in Ocaml properly, and a kind soul > posted a very elegant solution to the problem :-) unfortunately, i > still can't understand some things from it. > > What follows is some code with comments on how it is expected to be > used, and also > where my confusion in the semantics of the code lay. > > (* Return first 'n' from input and the rest. *) > let firstN n input = > let nInput = Array.length input in > if n >= nInput > then (input, [||]) > else (Array.sub input 0 n, Array.sub input n (nInput - n)) > > let group n input = > let rec group' n input = > if Array.length input = 0 then [] > else > let (front, rest) = firstN n input in > (* the next line confuses me. i'm aware of :: being a list > concatenation operator, but in this case, shouldn't group 'n rest be > returning an array, because that's what firstN returns. I've experimented in > the REPL and had no luck in figuring it out. *) > front :: group' n rest > in > Array.of_list (group' n input) > The specific problems that confuse me is that let rec group' ... in Array.of_list is all part of the same expression, so how does Ocaml let front :: group' n rest work?? firstN n input returns two arrays, and as far as my understanding goes, :: is a list concatenation operator. How then, does this work? Someone help! :) > if you pop this into the toplevel, and do: > > group 2 [|"Name1"; "Name2"; "Name3"; "Name4"; "Name5";|];; > > you'll see the general functionality expected. > -Ryan http://malander.undrgnd.net ------------------- 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