कुंजी-मान के साथ हास्केल द्विआधारी पेड़

वोट
3

(कश्मीर, वी) टपल साथ मूल्य लीफ़्स - मैं कुंजी के साथ द्विआधारी पेड़ का निर्माण करना चाहते।

मेरे कोड:

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))

अब मैं इस पेड़ को भरने के लिए कोशिश कर रहा हूँ:

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

लेकिन मैं इस त्रुटि मिलती है:

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

कारण क्या है और मैं इसे कैसे ठीक कर सकते हैं?

20/07/2011 को 18:38
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
6

आपका प्रकार या तो बहुत सामान्य या बहुत विशिष्ट है। यह होना चाहिए

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

या

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

आपका मूल घोषणा सम्मिलित करने के लिए कोशिश कर रहा था (Int, Int)एक में Tree k v से किसी के लिए k,v । यह कह रहे थे कि कोई बात नहीं आप पेड़ किस तरह का है, हम की एक जोड़ी सम्मिलित कर सकते हैं Intउस में रों। यह स्पष्ट रूप से बकवास है, और अपने हस्ताक्षर के रूप के लिए treeInsertइंगित करता है, तरह का एकमात्र जोड़े (k, v)एक में डाला जा सकता Tree k v

treeInsert :: (Ord k) => (k, v) -> Tree k v -> Tree k v
20/07/2011 को 18:47
का स्रोत उपयोगकर्ता

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