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 SAA00401; Sat, 2 Oct 2004 18:44:49 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id SAA05716 for ; Sat, 2 Oct 2004 18:44:48 +0200 (MET DST) Received: from mproxy.gmail.com (rproxy.gmail.com [64.233.170.196]) by concorde.inria.fr (8.13.0/8.13.0) with ESMTP id i92GilHE015892 for ; Sat, 2 Oct 2004 18:44:48 +0200 Received: by mproxy.gmail.com with SMTP id 74so93124rnk for ; Sat, 02 Oct 2004 09:44:47 -0700 (PDT) Received: by 10.38.208.53 with SMTP id f53mr4329040rng; Sat, 02 Oct 2004 09:44:47 -0700 (PDT) Received: by 10.38.165.26 with HTTP; Sat, 2 Oct 2004 09:44:46 -0700 (PDT) Message-ID: Date: Sat, 2 Oct 2004 11:44:46 -0500 From: "Seth J. Fogarty" Reply-To: "Seth J. Fogarty" To: caml-list Subject: Re: [Caml-list] really HO Functions In-Reply-To: Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit References: <1096490891.415b1f8b2ecbd@mouette.ens-lyon.fr> <7f8e92aa04100122022209e767@mail.gmail.com> X-Miltered: at concorde with ID 415EDB00.000 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Loop: caml-list@inria.fr X-Spam: no; 0.00; caml-list:01 2004:99 0400,:01 prevost:01 prevost:01 2004:99 observations:01 unmanageable:01 hofs:01 beginners:01 higher-order:01 refactoring:01 abstraction:01 hard-coded:01 passing:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk On Sat, 2 Oct 2004 02:33:43 -0400, John Prevost wrote: > On Sat, 2 Oct 2004 08:02:52 +0300, Radu Grigore wrote: > > I am learning OCaml now. The last two-three days I've written a small > > prototype; then I have reviewed it and one of the observations was > > that it contains no second-order function. > > > > Possible reasons: > > 1. higher order functions are hard (intellectually unmanageable) > > 2. HOFs are not needed in practice above a certain order > > 3. failure to recognize places where a HOF is needed (beyond the > > standard examples in tutorial). > > > > Number 3 was what prompted me to ask the question: a few examples > > always help. Unfortunately I didn't yet had time to read the cited > > articles :(. > > I highly recommend keeping at it and joining the beginners list (if > you haven't already). Making and using higher-order (as in 2nd or > 3rd, at least) functions is one of those things that you start doing > after you've been using a functional language for a while. It does > dramatically simplify your life when you start doing it, but it's not > immediately obvious how you'll use it. I've identified two places I've used HOF's, for really rather different reasons. 1) Modularity. This is probably obvious, but the hardest one to do, and probably the more useful location. I rarely use more than second-order functions for htis, and it is very often a refactoring. "Oh look, in this parser we are evaluating, unwrapping ints, and error-checking in eight places, the only difference is the function we apply to the integers afterwards. Time for an HOF." 2) Abstraction. These are places I could have hard-coded the functions I ended up passing in, but didn't so that the algorithm was very obvious in the code. This allows someone to look at that one chunk of code and go "alright, so that's the algorithm. How the specifics work I don't know, but the general overview is independent of the rest of the code". This may just be me, and is certainly NOT the usual use of HOFs. -- Seth Fogarty sfogarty@[gmail.com|rice.edu|livejournal] Neep-neep at large AIM: Sorrath "I know there are people in this world who do not love their fellow human beings - and I hate people like that" --Tom Lehrer. ------------------- 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