Re: How to hold a form and convert it to a string
- To: mathgroup at smc.vnet.net
- Subject: [mg93929] Re: How to hold a form and convert it to a string
- From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
- Date: Fri, 28 Nov 2008 07:11:40 -0500 (EST)
- Organization: Uni Leipzig
- References: <ggog1m$s6g$1@smc.vnet.net>
- Reply-to: kuska at informatik.uni-leipzig.de
Hi, the answer is just across the corridor HornerForm[a*q + b*q^2 + c*q^3, q] // CForm // ToString does not use Power[] at all and is more efficient in the numerical evaluation than a*q + b*q*q + c*q*q*q In Mathematica alone Unprotect[Power] Power /: MakeBoxes[a_^n_Integer, fmt_: StandardForm] := RowBox[ Riffle[Table[ToString[a], {n}], "*"]] Protect[Power] will solve the problem And for CForm the definition: ClearAttributes[Power, Protected] Format[Power[a_Symbol, n_Integer], CForm] := ToExpression[StringJoin @@ Riffle[Table[ToString[a], {n}], "*"], InputForm, HoldForm] Protect[Power] will produce a*q + b*q^2 + c*q^3 // CForm a*q + b*(q*q) + c*(q*q*q) Regards Jens re Patrick Scheibe wrote: > Hi, > > I'm sure it's a simple question but I don't get it. I want to transform > the expression > > a*q + b*q^2 + c*q^3 > > into a C-Code form > > "a*q + b*q*q + c*q*q*q" > > With the rule > exp //. (Power[q_, n_] :> Times@@Array[q &, n]) > for the transformation of the Power of q, > the expression is instantly reevaluated to the first form (as I expected > it). I could transform the complete first expression to a C-Form-String > and manipulate this. This would look like > > f[exp_] := StringReplace[ToString@CForm[exp], > "Power(" ~~ q_ ~~ "," ~~ n_ ~~ ")" :> > StringJoin[Riffle[Array[ToString@q &, ToExpression[n]], "*"]]] > > Isn't there a more stylish way? > > Cheers > Patrick >