elegance vs. 'quick and dirty': a Mathematica expression beauty contest
- To: mathgroup at yoda.physics.unc.edu
- Subject: elegance vs. 'quick and dirty': a Mathematica expression beauty contest
- From: gaylord at ux1.cso.uiuc.edu
- Date: Fri, 3 Apr 1992 02:49:02 -0600
a recent discussion of Flattening dealt with going from
startlist = {{a,a,a},{a,a},{{b,b},{b,b,b}},{a,a,a,a},{{b,b},{b}}}
to
finallist = {{a,a,a},{a,a},{b,b},{b,b,b},{a,a,a,a},{b,b},{b}}
Three solutions have been proposed:
#1
finallist = FixedPoint[
Replace[#,{A___,List[X___List],B___} :> {A,X,B}]&,
startlist]
Let $A be an unused or local symbol
finallist = Flatten[List @@ (
startlist /. List[X___List] :> $A[X]
/. {List->$A,$A->List}
)
] /. $A->List
#2
f[x_List] :=
Apply[Join,Map[(If[Head[First[#]] === List, #, {#}] &), x]]
#3
f[{x__}] := Sequence[x] /; Not[ And @@ AtomQ /@ {x} ]
f[{x__}] := {x}
f /@ startlist
==========================
#2 and #3 have been proposed by their authors as being 'quick and dirty'. I
don't agree at all with the authors. I rank these expressions in terms of
'elegance in the order
#2, #3, #1
I think that the definition is #2 is by far the 'best-looking' expression
because it is very easily understood and explainable to almost anyone. It
also makes excellent use of list manipulation (Join, First), higher-order
functions (Map) and anonymous functions (..#..&) and especially because it
makes use of the fact that M is comprised of expressions (Head, Apply).
I have alot of problems when I have to explain or even try to understand
myself an M expression that has 'Hold' in it. It almost always looks like
a 'work-around' or kludge.
I certainly do not want everyone to write M expressions in the same way
(one of the delights of M is that everything can be written almost every
way) and i learn the most about M from reading the varied ways of doing the
'same thing' as in the above example.
The question I want to raise is: how do people prefer their M expressions
to look?
Which of the above expressions do you like and why?