Transformation rule exercise

*To*: mathgroup at smc.vnet.net*Subject*: [mg4898] Transformation rule exercise*From*: rhall2 at umbc.edu (hall robert)*Date*: Fri, 4 Oct 1996 00:17:36 -0400*Sender*: owner-wri-mathgroup at wolfram.com

Dear Abbey, This has baffled me for two days now. It's exercise 4 from p. 113 of Introduction to Programming with Mathematica, by Gaylord, Kamin & Wellin. The problem is to rewrite g[x_] = x /. Plus[z___] -> Times[z] so that g[a + b + c] returns a b c The authors provide the following information: "Hint: You need to maintain the lhs of the transformation rule unevaluated for purposes of pattern-matching and the rhs of the rule unevaluated until the rule is used." Unfortunately, both my solutions violate both clauses of the hint. g1[x_] := x /. Plus -> Times g2[x_] := x /. Plus[y___, z___] -> Times[y, z] I could replace Rule with RuleDelayed in either function (replace -> with :>) but it isn't necessary. The authors state that the lhs is evaluated before the rule is applied, and Trace[] bears this out. I'm looking for a solution to which the authors' hint applies, but for the life of me I can't find it. Am I overlooking something obvious? Baffled near Baltimore -- Bob Hall | "Know thyself? Absurd direction! rhall2 at gl.umbc.edu | Bubbles bear no introspection." -Khushhal Khan Khatak ==== [MESSAGE SEPARATOR] ====