Temel olarak bir polimorfik ağaç veri türü oluşturdum ve belirli bir ağaçtaki öğe sayısını saymanın bir yoluna ihtiyacım var.Haskell'de bir ağaçtaki sayma öğeleri
data Tree a = Empty
| Leaf a
| Node (Tree a) a (Tree a)
deriving (Eq, Ord, Show)
Yani böyle Ints bir ağaca tanımlayabilirsiniz:
t :: Tree Int
t = Node (Leaf 5) 7 (Node (Leaf 2) 3 (Leaf 7))
Ancak, bunlardan birinin öğe sayısını saymak için bir işlev gerekir İşte benim Ağaç veri türü için ilanıdır listeleri. Bu özyinelemeli fonksiyon tanımladık ama hata alıyorum "türetilmiş tip yeterince genel değil": Ne yapıyor olması gerektiğini burada bir şey
size :: Tree a -> Int
size Empty = 0
size (Leaf n) = 1
size (Node x y z) = size x + size y + size z
var mı?
Boyut x + 1 + boyut z' değil miydi? Öğeleri saydığından ve her düğüm bir öğe içerir. – BaroqueBobcat
@BaroqueBobcat: Argh ... Yep;) – Dario
Aslında, "size" yazısının türü, sonsuz tip "Ağaç (Ağaç (Ağaç ...))) -> Int 'olacaktır. Bu gibi durumlarda, iyi bir numara her zaman kusurlu tip imzası bırakmak ve derleyicinin size doğru türün ne olduğunu düşündüğünü söylemesine izin vermektir. Bu durumda, GHC bana sonsuz bir tip oluşturmaya çalıştığını söylüyor ... – yatima2975