2

I want a function that works like in the following example: it gets an expression which contains a variable var and evaluate it setting setting var = value.

I used Block to avoid expr being evaluated if variable var holds a value in the notebook. It seems that my function works correctly - I made also a trace - but I get var inside block coloured red and I think it's a warning from Mathematica. Can you explain to me why I obtain it? Is my code wrong? Is there a better way to obtain the desired behavior?

SetAttributes[myFunc, HoldFirst];

myFunc[{expr_, var_}, value_] :=
  Block[{var}, expr /. var :> value]

picture

cormullion
  • 24,243
  • 4
  • 64
  • 133
Betelgeuse
  • 101
  • 2

1 Answers1

2

The coloring is there to tell you of a possible conflict. Your function will be replacing var in both the Block and RuleDelayed with whatever you use as the second term of the first argument. It's possible that this is exactly what you intend, but it is usually not, hence the highlighting to warn.

If you give an example of the use of your function I can more specifically tell you how to handle it.

Mr.Wizard
  • 271,378
  • 34
  • 587
  • 1,371
  • Thanksks for replying Mr Wizard. I thi nk in my case I just can ignore the warning because the behaviour I obtain is what I want – Betelgeuse Apr 06 '13 at 05:52