(no subject)



Agreed that the -a*b=>1 case is an error in my code.  Then again, "number
of terms" needs to be defined more clearly.

          -s



On Tue, Nov 6, 2012 at 12:08 PM, Jaime Villate <villate at fe.up.pt> wrote:

>  On 11/06/2012 03:26 PM, Stavros Macrakis wrote:
>
> 'length' will count the number of terms.
>
>  ...
>
>
>  So if you mean number of *multiplicative* terms, you might want
> something like:
>
>  multiplicative_terms(expr) := if mapatom(expr) or op(expr) # "*" then 1
> else length(expr)$
>  *
> Mutatis mutando *for additive terms.
>  ...
>
>  On Tue, Nov 6, 2012 at 9:54 AM, Sean <seany at uni-bonn.de> wrote:
>
>> ...
>>
>>
>> I need to know if there is a way to count the number of terms in an
>> expression.
>>
>> EG: the expression a*b has two terms, namely a and b
>>
>>   Hi,
> I think that Sean might find the following results unexpected:
>
> (%i3) multiplicative_terms(a*b*c*d);
> (%o3)                           4
> (%i4) multiplicative_terms(-a*b*c*d);
> (%o4)                           1
>
> Perhaps the following function is what he is looking for?:
>
> (%i5) nt([y]) := if length(y) < 1 then 0 else (if mapatom(first(y)) then
> 1+apply(nt,rest(y)) else apply(nt,args(first(y))) + apply(nt,rest(y)))$
>
> (%i6) nt(a*b*c*d);
> (%o6)                           4
>
> (%i7) nt(-a*b*c*d);
> (%o7)                           4
>
> (%i8) nt(-a*b*c*d + e/f +g);
> (%o8)                           7
>
> Regards,
> Jaime
>
>
>