Inne osoby zastosowały DAG do danych, ale myślę, że jest to co najmniej tak samo odpowiednie (jeśli nie bardziej) kodowanie. Mahbubur R Aaman wspomina o tym, więc tak naprawdę jest to bardziej uzupełnienie jego odpowiedzi niż pełna odpowiedź sama w sobie.
Przychodzi mi do głowy, że jakikolwiek imperatywny program komputerowy wolny od nieskończonych pętli (dzięki @AndresF.) Jest Directed Acyclic Graph (DAG). Oznacza to, że możliwe ścieżki wykonania kodu są skierowane (najpierw to, potem to) i acykliczne (nie tworząc nieskończonych pętli). Są to wykresy, ponieważ ścieżka przez dowolny znaczący kod rzadko jest tak prosta jak lista lub drzewo.
Pracowałem w XSLT przez może 4 lata. Miałem okropny czas, próbując wyjaśnić, dlaczego nie był to dobry język programowania ogólnego przeznaczenia, ale powodem jest DAG. W szczególności XSLT jest językiem opartym na danych. Definiujesz funkcje (tak, w sensie programowania funkcjonalnego), ale niekoniecznie wywołujesz te funkcje ze swojego kodu. Zamiast tego XSLT ustawia kombinację wyboru i iteracji węzłów wejściowego dokumentu XML. Pozwala to strukturze danych wejściowych określić, które funkcje są wywoływane i w jakiej kolejności.
Było to bardzo interesujące i bardzo fajne, dopóki twój program nie napotkał warunku danych, którego nie testowałeś o 2:30 i musiałeś się obudzić i naprawić. Gdy pozwolisz, aby dane definiowały DAG, wówczas definicja DAG staje się wszystkimi możliwymi warunkami wejściowymi - które dla każdej nietrywialnej aplikacji biznesowej są nieobliczalne; są niewyobrażalne.
Na początku myślałem, że programowanie funkcjonalne może nie być DAG, ponieważ programista czasami nie jest jasny, a nawet nie myślał o nim. Ale program funkcjonalny określa zależności. W rzeczywistości deklaratywny charakter programowania funkcjonalnego można uznać za definiowanie tylko zależności (a ^ 2 = b ^ 2 + c ^ 2) bez określania kolejności wykonywania (nie ma znaczenia, czy „b” czy „c” jest najpierw podniesione do kwadratu , o ile oba są podniesione do kwadratu przed zsumowaniem).
Ale chociaż programowanie funkcjonalne może być celowo niejasne co do kolejności operacji na poziomie szczegółowym, jest wyjątkowo jasne na temat zależności. Są to cechy, które sprawiają, że jest tak podatny na współbieżność. W każdym razie nadal istnieje wykres ścieżek w kodzie, który jest nadal kierowany (zależności muszą być ocenione przed zadaniami zależnymi), więc myślę, że DAG również tam ma zastosowanie.
Ładne pytanie - dziękuję za wysłanie wiadomości!