Bardzo łatwo jest przedstawić drzewo lub listę w haskell przy użyciu algebraicznych typów danych. Ale jak zabrałbyś się do typograficznego przedstawienia wykresu? Wygląda na to, że potrzebujesz wskazówek. Domyślam się, że możesz mieć coś takiego
type Nodetag = String
type Neighbours = [Nodetag]
data Node a = Node a Nodetag Neighbours
I to byłoby wykonalne. Jednak wydaje się nieco oddzielony; Powiązania między różnymi węzłami w strukturze tak naprawdę nie są tak solidne, jak łącza między bieżącymi poprzednimi i następnymi elementami na liście lub rodzicami i dziećmi węzła w drzewie. Mam przeczucie, że wykonywanie operacji algebraicznych na wykresie, tak jak to zdefiniowałem, byłoby nieco utrudnione przez poziom pośredni wprowadzony przez system tagów.
To przede wszystkim poczucie wątpliwości i poczucie nieelegancji powoduje, że zadaję to pytanie. Czy istnieje lepszy / bardziej matematycznie elegancki sposób definiowania wykresów w Haskellu? A może natknąłem się na coś z natury trudnego / fundamentalnego? Rekurencyjne struktury danych są fajne, ale wydaje się, że to coś innego. Struktura danych odnosząca się do siebie w innym sensie niż drzewa i listy odwołujące się do siebie. To tak, jakby listy i drzewa odwoływały się do siebie na poziomie typu, ale wykresy odwołują się do siebie na poziomie wartości.
Więc co się naprawdę dzieje?
fgl
Pakiet opracowany z tego.