Re: FactorInteger Print Formatting
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg774] Re: FactorInteger Print Formatting
- From: Count Dracula <lk3a at kelvin.seas.virginia.edu>
- Date: Tue, 18 Apr 1995 01:08:17 -0400
- Organization: University of Virginia
In Article 89 (Paul A. Rubin) rubin at msu.edu wrote: > In[1]:= faclist[ x_Integer ] := ff[ FactorInteger[ x ] ] > In[2]:= Format[ ff[ {n_Integer, 1} ] ] := n > In[3]:= Format[ ff[ {n_Integer, m_Integer} ] ] := SequenceForm[ n, "^", m ] > In[4]:= Format[ ff[ x_List ] ] := > SequenceForm[ ff[ x[[1]] ], "*", ff[ Rest[ x ] ] ] > In[5]:= Format[ ff[ {x_List} ] ] := ff[ x ] > This defines a function faclist that wraps the output of FactorInteger in a > dummy head "ff." Why not directly wrap SequenceForm around the object via the following easier definition? faclistnew[1] = SequenceForm[1] faclistnew[x_Integer] := Apply[SequenceForm, Drop[Flatten[FactorInteger[x] /. {{n_, 1} :> {n, "*"}, {n_Integer, m_} :> {n, "^", m, "*"}}], -1]] It seems that the appeareances do not change but we save the extra overhead of the extra Head ff: In[6]:= faclistnew[2400] Out[6]= 2^5*3*5^2 In[7]:= FullForm[%] Out[7]//FullForm= SequenceForm[2, "^", 5, "*", 3, "*", 5, "^", 2] In[8]:= faclist[2400] Out[8]= 2^5*3*5^2 In[9]:= FullForm[%] Out[9]//FullForm= ff[List[List[2, 5], List[3, 1], List[5, 2]]] By the way, a separate definition for 1 is necessary because FactorInteger[1] returns {} and consequently: In[10]:= faclist[1] Part::partw: Part 1 of {} does not exist. Rest::norest: Cannot take Rest of expression {} with length zero. Out[10]= ff[{}[[1]]]*ff[Rest[{}]] -- ___________________________________________________________________________________ Levent Kitis lk3a at cars.mech.virginia.edu lk3a at kelvin.seas.virginia.edu University of Virginia Department of Mechanical, Aerospace and Nuclear Engineering ___________________________________________________________________________________