Jason Grout wrote:
> Burcin Erocal wrote:
>> On Fri, 7 Nov 2008 01:14:26 -0800 (PST)
>> Simon King <[EMAIL PROTECTED]> wrote:
>>
>>> Dear Team,
>>>
>>> the impression that I got from this thread is the following:
>>> -------
>>> Commutative:
>>> 1. If f is a *commutative* polynomial in x,y,z,..., then everybody
>>> would at least correctly guess that f(1,2,3,...) has the intended
>>> meaning "evalutation of f at x=1, y=2, z=3,..."
>>> 2. Some people would actually *expect* (not just accept) that this
>>> meaning is intended.
>>>
>>> =>
>>>    It is ok that multivariate polynomials in Sage are callable in the
>>> sense described above. Currently, symbolic variables commute with each
>>> other, and thus it is acceptable that they are callable as well.
>>>
>>> Hence, no need to change!
>>> Do we agree on this?
>> I was already unhappy about symbolic expressions being callable, this
>> discussion convinced me that they shouldn't be.
>>
>> One thing we should not forget is that, polynomials and symbolic
>> expressions in Sage are different things. I really appreciate
>> polynomials being callable, and I don't see the need to differentiate
>> polynomial functions and polynomials. 
>>
>> Note that for polynomials, it is clear what to do when it is called.
>> There is an ordered list of variables that will be substituted. We
>> don't need to guess what the user intends.
>>
>> Things are not so simple for symbolic expressions. I find the current
>> behavior confusing, and many people on sage-support seem to be confused
>> by the different ways of constructing functions in Sage. (i.e.,
>> python function definition, f(x) = ... syntax, just use a symbolic
>> expression)
>>
>> I think the python function definition and f(x) = syntax are more than
>> enough, and we don't need to make symbolic expressions callable. 
>>
>> The advantage of the f(x) syntax is that it gives a clear and ordered
>> list of variables to substitute for. One could say that this exists for
>> any symbolic expression, since we have an alphabetically ordered list of
>> variables, but then we have the following problem:
>>
>> sage: var('x,y,a,b')
>> (x, y, a, b)
>> sage: f = a*x + b*y
>> sage: f(3,5)
>> 5*y + 3*x
>>
>> If I was trying to second guess what the user intended, I would expect
>> a and b to be constants, and x and y to be replaced. This is just
>> impossible to get right.
>>
>> Keeping the "explicit is better than implicit" motto in mind, I think
>> this should change. This syntax is much better, IMHO.
>>
>> sage: f(x,y) = a*x + b*y
>> sage: f(3,5)
>> 5*b + 3*a
>>
>> And I think this should raise an error:
>>
>> sage: f(5)
>> b*y + 5*a
>>
> 
> I  think it is very handy to be able to partially evaluate an 
> expression.  Do you propose a syntax that lets you effectively do f(5) 
> and get a function back?  For example, if I want to plot a level curve 
> of f at x=5 presuming that f(x,y)=2*x+3*y, say.  Here are some 
> possibilities:
> 
> 
> 
> plot( f(x=5), (y, -10,10))
> 
> plot( f(x=5,y=y), (y, -10,10))
> 
> plot( f(5,None), (y, -10,10))
> 
> plot( f(5,y), (y, -10,10))
> 
> g(y) = f(5,y)
> plot(g, (y, -10,10))
> That last one seemed too verbose


I guess you could also do:

plot( lambda y: f(5,y), (y, -10,10))

but then you give up things like fast_float.

Jason


--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to