La strategia legatura-the-nodo può essere utilizzato per costruire i grafici come, utilizzando un semplice grafico a doppio taglio come esempio:È possibile fare una ricerca su un grafico costruito con la strategia del nodo?
data Node = Node Node Node
-- a - b
-- | |
-- c - d
square = a where
a = Node b c
b = Node a d
c = Node a d
d = Node b c
Questa strategia è piuttosto elegante, ma non sono riuscito a trovare un modo per usarlo effettivamente senza etichette Int. Ad esempio, come posso scrivere una funzione che conta la quantità di nodi sul valore square
?
countNodes :: Node -> Int
countNodes = ... ??? ...
main = print $ countNodes square
-- output: 4
Non si può risolvere questo problema senza andare fuori la lingua. La tua nozione di etichetta unica, come un numero intero, è un buon refactoring del problema in qualcosa di risolvibile. –
Il problema può essere risolto sul caso di bordi etichettati? I.e, 'a = Nodo (b, 0) (c, 0)', che rappresenta che 'a' si trova sul primo slot di' b' e 'c'? – MaiaVictor
Se le etichette non sono globalmente univoche, si verifica ancora il problema che non è possibile identificare se due nodi sono distinti. –