Re: More /.{I->-1} craziness, con brio
- To: mathgroup at smc.vnet.net
- Subject: [mg106633] Re: More /.{I->-1} craziness, con brio
- From: Richard Fateman <fateman at cs.berkeley.edu>
- Date: Tue, 19 Jan 2010 05:14:31 -0500 (EST)
- References: <200912300915.EAA17299@smc.vnet.net> <hhhmn8$o9t$1@smc.vnet.net> <his71l$lad$1@smc.vnet.net> <201001171213.HAA09349@smc.vnet.net> <hj131g$bdr$1@smc.vnet.net>
Andrzej Kozlowski wrote:
>
> I is never evaluated and is seen as an object with Head Symbol.
Yes, so that explains why the "error" is not caught and the message
given for that case, too. In fact the "symbol" is converted to
something like I$1234, which was explained in my note. Explaining why a
system behaves in a certain way is not equivalent to proving that it is
correct. At least in my book.
So
> everything works for this reason,
No, as I said,
With[{I=-I}, 3+4 I] returns 3-4 I,
v=3+4I; With[{I=-I},v] returns 3+4I.
You can, of course, say that "this works, we meant to do that, any user
who does not read and understand the full documentation should not use
With, or more generally, should not expect Mathematica to conform to any
particular ordinary beliefs about mathematics except by coincidence".
I explained why, and frankly, the idea that you can (in the technical
sense) lambda-bind numbers, is a novelty. Just as you cannot locally
bind 3 to 4, you should not be able to locally bind I to 4, at least if
I is a constant. That's not a feature, and explaining how it works is
to point out a solution to the puzzle of this buggy behavior, and
perhaps point to a solution. Properly implementing lambda-binding
would be one solution, instead of constructing new names like I$1234
would be one way.
RJF
- References:
- Re: More /.{I->-1} craziness, con brio
- From: Richard Fateman <fateman@cs.berkeley.edu>
- Re: More /.{I->-1} craziness, con brio