       Re: Flattening

• To: mathgroup at yoda.physics.unc.edu
• Subject: Re: Flattening
• From: Cetin Cetinkaya <cetin%acm4 at yoda.physics.unc.edu>
• Date: Fri, 3 Apr 1992 13:32:48 -0600

``` gaylord at ux1.cso.uiuc.edu writes:

>Subject: elegance vs. 'quick and dirty': a Mathematica expression beauty contest

>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

But I think the true winner is number 1 because it is the only one which works!
Let me explain what I mean:

In:= f[x_List] :=
Apply[Join,Map[(If[Head[First[#]] === List, #, {#}] &), x]]
0.  1317.904 KByte

In:= f[{{{{a,b},{c,d}}}}]
0.  1318.38 KByte

Out= {{{a, b}, {c, d}}}

Thus, number 2 does not work for more general lists. Only "first order" lists
can be handled using it.

In:= f[{x__}] := Sequence[x] /; Not[ And @@ AtomQ /@ {x} ]
0.  1319.276 KByte

In:= f[{x__}] := {x}
0.  1319.988 KByte

In:= f/@{{{{a,b},{c,d}}}}
0.  1320.492 KByte

Out= {{{a, b}, {c, d}}}

And this shows that number 3 does not work,either.  However,

In:= FixedPoint[
Replace[#,{A___,List[X___List],B___} :> {A,X,B}]&,
{{{{{{a,b},{c,d}}}}}}]
0.0166667 Second  1322.456 KByte

Out= {{a, b}, {c, d}}

Therefore, the only working one and the winner is number 1.

ccetinkaya

```

• Prev by Date: Re: bug in Splice?
• Next by Date: Re: Ceiling & Floor
• Previous by thread: Re: bug in Splice?
• Next by thread: Re: Flattening