Re: Style Question: The Functional Way
- To: mathgroup at smc.vnet.net
- Subject: [mg115812] Re: Style Question: The Functional Way
- From: Ray Koopman <koopman at sfu.ca>
- Date: Fri, 21 Jan 2011 04:33:16 -0500 (EST)
- References: <ih967m$okt$1@smc.vnet.net>
On Jan 20, 3:27 am, Just A Stranger <forpeopleidontk... at gmail.com> wrote: > Hello, > > So I'm trying to learn how to do things the functional way. As an > exercise I'm trying to program a simple economics related table > that gives revenue, marginal revenue, etc given a demand schedule > (2 lists of numbers representing quantity and price respectively). > A simple task in a spreadsheet. > > The point is that I need a list of the differences in the given lists, > from which I will be using to get marginal values (derivatives). I'll > call it, say, DeltaList, and I was wondering if this would be a proper > "functional" way to go about the task: > > In[0]: DeltaList[L_] := Subtract @@@ Reverse /@ Partition[L, 2, 1] > > (DelatList: list -> list) > > Basically, it partitions the list into ordered pairs, reverses those > ordered pairs to prep them for the subsequent Subtract application. > > Is this the right way to think about this (painfully simple) problem > in a functional way? > > Thank you. All of you have been most helpful in the past. Instead of Reversing before subracting, change all the signs after subtracting: DeltaList2[L_] := - Subtract @@@ Partition[L, 2, 1] Instead of partitioning, work with the entire vectors, lagged: DeltaList3[L_] := Rest@L - Most@L Or remember that there is already a built-in routine: DeltaList4[L_] := Differences[L]