函式式語言怎樣表示圖呢?

時間 2021-05-31 13:54:45

1樓:韓冬

瀉藥,這個問題在純函式式語言裡確實不好解決,因為圖的很多運算包括構建過程都會遇到這樣乙個問題:因為純函式式資料結構是不可變的,乙個節點空間上指向的可能是另乙個時間上還未被建立的節點,haskell裡乙個顯而易見的解法是使用ST或者IO,比如用IORef [Node]來儲存節點指向的其他節點。這樣其他過程式語言的演算法在IO Monad裡實現就可以了。

另乙個做法是tying the knot,乙個典型的應對cyclic的資料建立的做法,簡單的說我們讓先建立的資料節點包含乙個thunk,推遲thunk求值來實現空間上的互相引用,但是這個做法可以應付建立,應付不了區域性修改。所有的修改操作全量建立整個圖,當然查詢類演算法效率還是不錯的。

2樓:歐先飛

struct edge ;

int pe;

vector head;

vector graph;

void addedge(int from, int to, int weight)

可以表示多重邊,實質是鄰接表

3樓:祖與佔

github.com/athanclark/dagnott.ac.uk 的頁面 Functional Programming with

4樓:rainoftime

沒時間總結。。以OCaml為例推薦幾個參考的:

99 problems, 跳到Graph部分Dexter Kozen(真.大神)的CS 3110 講義某些知名庫如OCamlGraph(其文件Designing a Generic Graph Library

using ML Functors也值得一看)另外很多OCaml專案都喜歡自己造輪子,各種graph應該有不少。。。(

函式式語言中如何實現while true?

先糾正乙個錯誤觀念,誰說函式式語言沒有迴圈體,F 就有啊,題主的問題應該是像 Haskell 這樣的語言,沒有變數與迴圈體的如何 while true 一下內容與 Haskell 相關 現提供乙個我常犯的錯誤,出錯原因是常常少寫單引號啥的 pf f p f如果考慮惰性求值一類的問題,加上強者求值的東...

為什麼很多函式式語言都有toplevel模式但其他語言裡面就沒有呢

因為 OCaml 的前身 Caml 是用 Lisp 寫的 Edinburgh ML 的分支,Edinburgh ML 是給互動式定理證明器用的控制語言所以當然會有 toplevel。OCaml 繼續提供 Toplevel 動態載入預編譯檔案只是個為了模擬 Lisp image based devel...

C 用作函式式語言時,是否有語法上的缺失?

徐辰 typename Args inline auto Fp f,Args args decltype std forward f std forward args typenameA0,typename Args inline auto Fp f,A0 a0 Args args decltype...