Re: [fricas-devel] Re: Programming with BTREEs.

Ralf Hemmecke <[email protected]> Tue, 07 Apr 2009 15:25:22 +0200
Newsgroups gmane.comp.mathematics.axiom.user
Message-ID <[email protected]>
> but 
> 
> [e,[5,1],[[a,[1,1],b],[1,1],[c,[1,2],d]]]@BT
> 
> cannot work, I think, because the argument types don't match.  You
> will need to allow also binary trees.

Ooops. You are completely right.

The last part in the input file can be replaced by

----
S==>Symbol
L==>List Integer
U==>Union(BT,S)

construct(x: U, l: L, y: U): U ==
   u: BT := if x case S then binaryTree(x::N) else x::BT
   v: BT := if y case S then binaryTree(y::N) else y::BT
   binaryTree(u, l, v)::U

l: List U := [a,b,c,d,e]
(a,b,c,d,e):=(l 1, l 2, l 3, l 4, l 5)
u: U := [e,[5,1],[[a,[1,1],b]@U,[1,1],[c,[1,2],d]@U]@U]
bt2: BT := u :: BT
----

where the @U part is necessary (though ugly) since otherwise Axiom (oh, 
FriCAS in my case) falsely creates

(25) -> [a,[1,2],b]

    (25)  [a,[1,2],b]
                             Type: List(Any)

which is a very unspecific (and bad) choice in the pressence of my new 
function from above and a and b being both variables of type U.

Yet another instance of why I hate "Any".

Ralf