Hi Martin,

Now, the function works. Thanks for the help and explanation.

2009/3/23 Martin Rubey <[email protected]>

> Hi Cereja!
>
> There is one "real" problem with your definition, and another one
> that is trivial.
>
> The "real" problem is that
>
>         dx(x) == D(func,x)
>
> cannot work.  (I'm guessing that you want to define a function that
> returns the derivative of func evaluated at x.)  Actually, I'm not
> sure what the interpreter would do with it in case it could compile
> it.  I guess it would interpret it as a "rule", which is certainly
> not what you had in mind.
>
> The right way to do this is
>
>         dx := D(func, x)
>         m := eval(dx, x=P1.1)/(2*P1.2)
>
> i.e., you define dx to be the derivative of func (i.e., dx is a
> polynomial) and then you evaluate it using "eval".
>
>
> The second, minor problem is that the interpreter is too stupid to
> infer the types of m and ponto.  The workaround is to help the
> interpreter by declaring them appropriately.
>
> Below a function that seems to work.
>
> Martin
>
>
> AddPoints(func:POLY(INT),P1:LIST(INT),P2:LIST(INT)):LIST(FRAC(INT)) ==
>   z:=1
>   m: FRAC INT
>   ponto: List FRAC INT
>   if (P1.3 = 1) and (P2.3 = 1) then
>      if (P1.1 < P2.1) then
>         m:= (P2.2 - P1.2)/(P2.1 - P1.1)
>      if (P2.1 < P1.1) then
>         m:= (P1.2 - P2.2)/(P1.1 - P2.1)
>      if (P1.1 = P2.1) and (P1.2 ~= P2.2) then
>         z:=0
>      if (P1.1 = P2.1) and (P1.2 = P2.2) then
>         dx := D(func, x)
>         m:= eval(dx, x=P1.1)/(2*P1.2)
>       if (z = 1) then
>         a := m^2
>         xsoma := (-(P1.1 + P2.1 - a))
>         ysoma := ((m*(xsoma-P1.1) + P1.2) * (-1))
>         ponto := [xsoma,ysoma,z]
>         ponto
>      else
>         [0,1,z]
>   else
>      if (P1.3 = 0) then
>         ponto := P2
>      else
>         ponto := P1
>      ponto
>
>
>
_______________________________________________
Axiom-mail mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/axiom-mail

Reply via email to