Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Replacement rules that contain function arguments (evaluation order)

  • To: mathgroup at smc.vnet.net
  • Subject: [mg105317] Replacement rules that contain function arguments (evaluation order)
  • From: Leo Alekseyev <dnquark at gmail.com>
  • Date: Sat, 28 Nov 2009 01:04:18 -0500 (EST)

Dear Mathgroup,

I am trying to understand what happens when a pattern from function
definition appears in the list of replacement rules.  In particular,
consider this:

(* Example (A): *)
Clear[foo,kij,k];
foo[k_] := kij /. {kij :> Table[k[[i]] k[[j]], {i, 1, 3}, {j, 1, 3}]}
foo[{1, 1, 1}]
(* gives {{1, 1, 1}, {1, 1, 1}, {1, 1, 1}} as expected *)

(* But now, let's put replacement rules into a variable: *)
(* Example (B): *)
rrules := {kij :> Table[k[[i]] k[[j]], {i, 1, 3}, {j, 1, 3}]}
foo[k_] := kij /. rrules
foo[{1, 1, 1}]
(* rrules gets evaluated first, hence this fails *)

My question is -- is there a good way to control evaluation such that
even though rules are defined in a variable, evaluation proceeds as in
Example (A)?

Below are a couple of things I found to work, but they are somewhat
syntactically cumbersome.

(* Example (C): works, but have to manually turn off messages *)
foo[k_] := Evaluate[Off[Part::"partd"]; kij /. rrules]; On[
 Part::"partd"]
foo[{1, 1, 1}]

(* Example (D): works, but have to rename function argument and wrap
in a block *)
foo[kk_] := Block[{k = kk}, kij /. rrules];
foo[{1, 1, 1}]

Thanks,
--Leo


  • Prev by Date: Re: ItemSize and ImageSize->Full ,
  • Next by Date: Re: How to make {f,g}[a,b,c] to become
  • Previous by thread: Re: How to make {f,g}[a,b,c] to become
  • Next by thread: Re: Replacement rules that contain function arguments