On Jun 9, 2009, at 9:47 AM, Jason Bandlow wrote:
>> On Jun 9, 2009, at 8:29 AM, Jason Bandlow wrote:
>>
>>> Hi,
>>>
>>> I ran across the following behavior in sage-3.4.1 and sage-4.0 (I
>>> don't
>>> have 4.0.1 yet), and I find it fairly disturbing.
>>>
>>> sage: d = {'a': 1} # Create some object
>>> sage: d
>>> {'a': 1}
>>> sage: type(d) = type({}) # Attempt to check the type but
>>> # foolishly use = instead of ==
>>>
>>> TypeError: cannot coerce type '<type 'type'>' into a
>>> SymbolicExpression. # An error is expected
>>>
>>> sage: d # But now my data is gone!
>>> d
>>> sage: type(d) # Replaced by a symbolic variable
>>> <class 'sage.calculus.calculus.SymbolicVariable'>
>
> Robert Bradshaw wrote:
>> This isn't a coercion issue, it's because of how functions are
>> defined in Sage using the "f(x) = expr" notation using the preparser.
>> I think that's too useful to get rid of. We could special case a
>> warning for "type(x) = ..." but I'm not sure if that's the best idea.
>
> Interesting! This means the problem is worse than I thought.
> Anytime we
> have data 'd' and 'e' and a function 'f', doing
>
> sage: f(d) = e # Instead of f(d) == e
>
> will raise a TypeError and replace 'd' with a symbolic variable.
> Fortunately, though,
>
> sage: if f(d) = e: # The usual reason to check equality
>
> raises a SyntaxError first, so maybe this problem isn't so serious.
Yes, I think it's fairly rare to want to do this. Probably should be
added to an FAQ somewhere at least, as it's a surprising and subtle
side effect.
> Still, it seems like it should be possible for the preparser to check
> whether f(d) evaluates to something (in which case, the assignment is
> going to fail anyway) before it makes the argument(s) symbolic
> variables.
You don't want to dissallow
sage: f(x) = x^2
[do some stuff with f]
sage: f(x) = x^3
[do some stuff with the new f]
- Robert
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---