Orang lain telah menerapkan DAG ke data, tapi saya pikir itu setidaknya berlaku (jika tidak lebih) ke kode. Mahbubur R Aaman menyebutkan ini, jadi sebenarnya ini lebih merupakan tambahan untuk jawabannya daripada jawaban lengkap sendiri.
Itu terjadi kepada saya daripada program komputer penting yang bebas dari loop tak terbatas (terima kasih @AndresF.) Adalah Grafik Acyclic Diarah (DAG). Berarti bahwa kemungkinan jalur eksekusi kode diarahkan (pertama ini, lalu itu), dan asiklik (tidak membentuk loop tak terbatas). Mereka adalah grafik karena jalur melalui kode signifikan jarang jarang sesederhana daftar atau pohon.
Saya bekerja di XSLT selama mungkin 4 tahun. Saya mengalami kesulitan untuk menjelaskan mengapa itu bukan bahasa pemrograman tujuan umum yang baik, tetapi DAG adalah alasannya. Secara khusus, XSLT adalah bahasa yang digerakkan oleh data. Anda mendefinisikan fungsi (ya, dalam arti pemrograman fungsional) tetapi Anda tidak perlu memanggil fungsi-fungsi ini dari kode Anda. Sebaliknya, XSLT mengatur kombinasi pemilihan, dan iterasi melalui, simpul-simpul dari dokumen input XML. Ini memungkinkan struktur data input menentukan fungsi mana yang dipanggil dan dalam urutan apa.
Ini sangat menarik dan sangat keren sampai program Anda menemukan kondisi data yang tidak Anda uji pada pukul 2:30 pagi dan Anda harus bangun dan memperbaikinya. Ketika Anda membiarkan data menentukan DAG, maka definisi DAG menjadi semua kondisi input yang mungkin - yang untuk aplikasi bisnis non-sepele tidak dapat dihitung; mereka tak terbayangkan.
Pada awalnya saya berpikir bahwa pemrograman fungsional mungkin bukan DAG karena urutan eksekusi terkadang tidak jelas, atau bahkan dipikirkan oleh programmer. Tetapi program fungsional mendefinisikan dependensi. Bahkan, sifat deklaratif pemrograman fungsional dapat dianggap sebagai mendefinisikan hanya dependensi (a ^ 2 = b ^ 2 + c ^ 2) tanpa menentukan urutan eksekusi (tidak masalah apakah 'b' atau 'c' dikuadratkan terlebih dahulu , asalkan keduanya dikuadratkan sebelum ditambahkan bersama).
Tetapi sementara pemrograman Fungsional mungkin secara sengaja tidak jelas tentang urutan operasi pada tingkat terperinci, sangat jelas tentang ketergantungan. Ini adalah fitur-fitur yang membuatnya bisa menerima konkurensi. Bagaimanapun, masih ada grafik jalur melalui kode, dan grafik itu masih diarahkan (dependensi harus dievaluasi sebelum tugas tergantung), jadi saya pikir DAG berlaku di sana juga.
Pertanyaan yang bagus - terima kasih telah memposting!