Question

I am still having problems with this so I can going to ask for more help.

We are given:

datatype which = STRING of string | INT of int

Part 1. We are told we need to created another datatype named whichTree for a binary tree containing the values of type "which" where data is only at the leaves of the tree.

I assumed this would be the correct answer:

datatype whichTree = Empty | Leaf of which | Node of whichTree*whichTree;

It turns out it is not as when I run:

val inttree = Node(Leaf(1), Leaf(2));

I get an error.

I was able to figure out that I can do something like this:

datatype 'a whichTree = Empty | Leaf of 'a | Node of 'a whichTree * 'a whichTree;

or

datatype whichTree = Empty | Leaf of int | Node of whichTree*whichTree;

But neither of these seem correct to me as in my first case my datatype name has a 'a in it and in my other one I am saying Leaf of int when I should be able to specify string or int by using which.

Can anyone tell me what the correct answer it or provide me with some help?

Was it helpful?

Solution

Your definition of whichTree is correct, you're just missing the constructor for which in your inttree:

val inttree = Node(Leaf(INT 1), Leaf(INT 2))
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top