Fondamentalmente ho definito un tipo di dati albero che è definito come segue:Inserimento di un valore in un albero ordinato in Haskell
data Tree a = Empty
| Leaf a
| Node (Tree a) a (Tree a)
deriving (Eq, Ord, Show)
ora devo creare una funzione per inserire un valore in un albero ordinato (si non ha bisogno di ordinare l'albero, basta aggiungere il valore). Questo è ciò che mi è venuta in mente finora:
insert :: a -> Tree a -> Tree a
insert x Empty = Leaf x
insert x (Leaf m) | m < x = Node (Leaf x) m Empty
| otherwise = Node Empty m (Leaf x)
insert x (Node l m r) | x > m = Node (Leaf l) m (insert x r)
| otherwise = Node (insert x l) m (Leaf r)
Tuttavia, quando ho eseguito questo ottengo il seguente messaggio di errore:
non poteva competere con tipo 'a' (una rigida previsto variabile) in base al tipo inferito 'Albero a' 'a' è associato alla firma del tipo per 'insert' in Main.hs: 11: 10 Nel primo argomento di 'Leaf', ovvero 'l' Nel primo argomento di 'Nodo', ovvero '(Leaf l)' Nell'espressione: Nodo (Leaf l) m (insert xr)
Suppongo che sia qualcosa a che fare con i tipi ma non riesco a vedere dove ho messo nessun tipo che non dovrebbe essere lì.
"Dai a un uomo un pesce e dagli da mangiare per un giorno, insegna a un uomo a pescare e gli dai da mangiare per tutta la vita". Bella risposta! – yairchu