Ich schrieb den folgenden Code einen polymorphen Binärbaum in Haskell als Vorbereitung für die funktionale Programmierung Prüfung nächste Woche für den Umgang:Haskell Polymorphe Baum Sum
data ITree t = Leaf | Node t (ITree t) (ITree t)
deriving (Eq, Ord, Show)
treeSum :: ITree t -> Int
treeSum Leaf = 0
treeSum (Node n t1 t2) = n + (treeSum t1) + (treeSum t2)
Jetzt habe ich das Problem, dass der Code nicht Kompilieren:
...\tree.hs:8:26:
Couldn't match type `t' with `Int'
`t' is a rigid type variable bound by
the type signature for treeSum :: ITree t -> Int
at ...\tree.hs:7:1
In the first argument of `(+)', namely `n'
In the first argument of `(+)', namely `n + (treeSum t1)'
In the expression: n + (treeSum t1) + (treeSum t2)
Failed, modules loaded: none.
Prelude>
Wissen Sie, was mit treeSum nicht stimmt? Ich denke, es hat etwas mit dem polymorphen Typ von ITree zu tun, aber ich weiß nicht, wie ich das lösen soll. Muss ich angeben, dass der Typ t ein Typ sein muss, der gezählt/nummeriert werden kann? Wahrscheinlich mit einer Klasseninstanz einer solchen Typklasse?
Vielen Dank im Voraus für Ihre Hilfe!
Simon
Was sollte 'treeSum (Knoten" marshmellow "Leaf Leaf) sein? – dave4420
Es gibt keine Notwendigkeit :) Aber für Floats! – saimn
Richtig, aber der Typ, den du für 'treeSum' gibst, verspricht, dass es für jeden Typ' t', sogar 'String' funktioniert. – dave4420