Re: Programming: List Structure Manipulation
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg901] Re: Programming: List Structure Manipulation
- From: rubin at msu.edu (Paul A. Rubin)
- Date: Sun, 30 Apr 1995 03:35:30 -0400
- Organization: Michigan State University
In article <3nck7m$a07 at news0.cybernetics.net>, Xah Y Lee <xyl10060 at fhda.edu> wrote: ->Can anyone show me better ways to write the following function? -> ->fun[listA_, styleList_]:= -> Table[ -> Append[ -> Flatten@{ First@RotateLeft[styleList,t-1] }, listA[[t]] -> ], -> {t, Length@listA} -> ] -> [snip] The following, somewhat cumbersome, definitions produce a function "fun" (defined, for convenience, in terms of another function "fun1") which matches all your examples and seems tolerably quick. There is probably a more efficient way of coding it, but at the moment this is the best that comes to mind. Clear[ fun, fun1 ]; fun1[ x_List, y_List ] := MapThread[ fun1, {x, y} ] /; Length[ x ] == Length[ y ] fun1[ x_List, y_List ] := Module[ {z = Partition[ x, Length[ y ] ], w}, w = Drop[ x, Length[ Flatten[ z, 1 ] ] ]; If[ w != {}, z = Append[ z, w ] ]; fun1[ #, y ]& /@ z ]/; Length[ x ] > Length[ y ] fun1[ x_List, y_List ] := fun1[ x, Take[ y, Length[ x ] ] ] /; Length[ x ] < Length[ y ] fun1[ x_, y_ ] := Flatten[ {y, x} ] /; Head[ x ] =!= List fun[ x_, y_ ] := Flatten[ fun1[ x, y ], 1 ] Paul ************************************************************************** * Paul A. Rubin Phone: (517) 432-3509 * * Department of Management Fax: (517) 432-1111 * * Eli Broad Graduate School of Management Net: RUBIN at MSU.EDU * * Michigan State University * * East Lansing, MI 48824-1122 (USA) * ************************************************************************** Mathematicians are like Frenchmen: whenever you say something to them, they translate it into their own language, and at once it is something entirely different. J. W. v. GOETHE