Haskell bináris fa kulcsértékre

szavazat
3

Azt akarom, hogy bináris fa kulcs - érték levelek a tuple (k, v).

Saját kód:

data Tree k v = EmptyTree 
                | Node (k, v) (Tree k v) (Tree k v)
                deriving (Show, Eq, Ord, Read)

emptyTree :: (k,v) -> Tree k v  
emptyTree (k,v) = Node (k, v) EmptyTree EmptyTree

treeInsert :: (Ord k) => (k,v) -> Tree k v -> Tree k v
treeInsert (k,v) EmptyTree = emptyTree (k, v)
treeInsert (a, b) (Node (k,v) left right) 
        | a == k = (Node (a,b) left right)
        | a < k = (Node (a, b) (treeInsert (a, b) left) right)   
        | a > k = (Node (a, b) left (treeInsert (a, b) right))

Most próbálom kitölteni ezt a fát:

fillTree :: Int -> Tree k v -> Tree k v
fillTree x tree = treeInsert (x, x) tree

De én ezt a hibát:

Couldn't match type `v' with `Int'
      `v' is a rigid type variable bound by
          the type signature for fillTree :: Int -> Tree k v -> Tree k v

Mi az oka, és hogyan tudom megjavítani?

A kérdést 20/07/2011 18:38
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
6

A típus vagy túl általános vagy túl konkrét. Kellene lennie

fillTree :: Int -> Tree Int Int -> Tree Int Int

vagy

fillTree :: (Ord a) => a -> Tree a a -> Tree a a

Az eredeti nyilatkozat akarta szúrni (Int, Int)egy Tree k v bármilyen k,v . Azt mondja, hogy nem számít, hogy milyen fa van, akkor helyezzen be egy pár Ints benne. Ez egyértelműen nonszensz, valamint az aláírását treeInsertis jelzi, csak pár típusú (k, v)lehet illeszteni egy Tree k v.

treeInsert :: (Ord k) => (k, v) -> Tree k v -> Tree k v
Válaszolt 20/07/2011 18:47
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more