Oops, I said "I think I like it best when dummy variables are local to the expression (not local to the function, or a
sum(), prod() or integrate()." I meant "I think I like it best when _non_ dummy variables are local to the expression
or to the context (not local to the function, or a sum(), prod() or integrate()." I think they should have different
internal symbols for each. $a for the a in assume() and a mangled a for the dummy var (Like $$a).
--------------------------------------------------
From: "Richard Hennessy" <rich.hennessy at verizon.net>
Sent: Tuesday, February 23, 2010 2:25 PM
To: "Richard Fateman" <fateman at cs.berkeley.edu>; "Stavros Macrakis" <macrakis at alum.mit.edu>; "Maxima List"
<maxima at math.utexas.edu>
Subject: Re: [Maxima] $asksign might need its own context
> I think there are two kinds of variables. Dummy variables and all the rest. In function definitions the parameters
> to the function are dummy variables because they can be any valid Maxima symbol and in the function behavior it makes
> no difference which one you use (or should not make any difference) as long as you are consistent. The same is true
> for variables of integration, differentiation, summation, prod()'s and there are probably other examples which I don't
> have at the tip of my fingers right now. Below there are two a's, one is a dummy variable the other is not. It's that
> simple. I think I like it best when dummy variables are local to the expression (not local to the function, or a
> sum(), prod() or integrate(). But non dummy variables should all be treated as having the one value. Dummy variables
> on the other hand don't have a value, nor should they. So there is no confusion.
>
> I think this is a bug.
>
> (%i1) x:10;
> (out1)
> (%i2) diff(x^2,x);
>
> diff: second argument must be a variable; found 10
> -- an error. To debug this try: debugmode(true);
> (%i3)
>
> diff should hide the value of x at the top level, same for integrate and return 2*x or x^3/3 respectively.
>
> I think the current behavior below is right.
>
> (%i1) assume(a>0);
> (out1) [a > 0]
> (%i2) f(a):=if a<0 then -a else a;
> (out2) f(a) := if a < 0 then - a else a
> (%i3) f(a);
> (out3) a
> (%i4) f(u);
> (out4) if u < 0 then - u else u
>
> --------------------------------------------------
> From: "Richard Fateman" <fateman at cs.berkeley.edu>
> Sent: Tuesday, February 23, 2010 11:40 AM
> To: "Stavros Macrakis" <macrakis at alum.mit.edu>; "Maxima List" <maxima at math.utexas.edu>
> Subject: Re: [Maxima] $asksign might need its own context
>
>>
>> we could change the evaluation of a command on line %i10 to be something like evaluating
>> block([],newcontext(%i10), ... result: whatever is on line 10 .... , revert context, return result),
>>
>> but this would not work if the command were, say, assume(a>0).
>>
>> We could allow assumptions to become "sticky" on command.
>>
>> I don't mind the current behavior, since it can be fixed by stating assumptions earlier, and it allows for
>> the possibility that the two a's ARE different. Though how you would know which is which from the question...
>> In particular, they are typically different in a case like this:
>>
>> f(a):= -a if a<0
>> := a if a>=0
>>
>> (pick your own maxima syntax for expressing this).
>>
>> RJF
>>
>> _______________________________________________
>> Maxima mailing list
>> Maxima at math.utexas.edu
>> http://www.math.utexas.edu/mailman/listinfo/maxima
>>
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
>