functional code
- To: mathgroup at smc.vnet.net
- Subject: [mg4779] functional code
- From: gaylord at ux1.cso.uiuc.edu (richard j. gaylord)
- Date: Fri, 13 Sep 1996 13:54:58 -0400
- Organization: university of illinois
- Sender: owner-wri-mathgroup at wolfram.com
i received the following query from someone and thought i'd post the
problem and a solution i've come up with:
query:
Here is my non-functional solution to this problem:
Given a list of numbers row={18,19,1,11,25,12,22,14}
Select the numbers from the list by taking the largest number
from the ends of the list until the list is empty.
row={18,19,1,11,25,12,22,14};
p=Length[row];
result={};
Do[If[First[row]>=Last[row],
AppendTo[result, First[row]];row=Rest[row],
AppendTo[result,Last[row]];row=Drop[row,-1]],
{p}];
result
{18,19,14,22,12,25,11,1}
If there a way to do this functionally?
response: yes, of course it can be done functionally.
here's a solution:
[sorry if its a bit crude but i've spent the last 15 months writing
cellular automata programs in mathematica and there is almost no
programming involved, just simple rule writing, so i may a bit rusty [what
an incrediblly immodest plug for my new book just arriving in bookstores
as of last week :)].
In[30]:=
Nest[
Function[y,
({Join[y[[1]],{#}] , DeleteCases[y[[2]], #]})&[Max[First[y[[2]]],
Last[y[[2]]]]]], {{}, row}, Length[row]][[1]]
Out[30]=
{18, 19, 14, 22, 12, 25, 11, 1}
-richard-
--
"if you're not programming functionally, then you're programming dysfunctionally"
==== [MESSAGE SEPARATOR] ====