Re: [問題] 大家覺得函數式語言有前途嗎?

看板Programming作者 (XOO)時間11年前 (2013/10/30 09:18), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
: haskell 是目前 ML 系語言中,社群整合最好的,cabal 很方便 : 就能下載別人寫好的 lib 來用,但相較於前兩者,要跨過的門 : 檻就高很多,一般的 FPL 都會提供一個用來宣告 side-effect : 變數的方法,即使是很雜的 Common Lisp 也有區分這兩者, : haskell 用來提供 side-effect 的做法叫作 monad,這還只是 : 第一個門檻,光這個就可以讓人花上半年一年去搞懂它了,更 : 不必提載下來的兩個 lib 都有 monad 的時候該怎麼辦了。 : 但是當我們想了解 Types 是什麼,PL 又是什麼,又例如該怎 : 麼設計一個 PL 的時候,最容易幫助我們理解並且解決這些問題 : 的通常會是 FPL,你可以 google 書單,就不多講這個了。 這邊有一點要澄清的,Haskell 中談 side-effect 並不等於 impure function, 只有用到 IO monad,Haskell 的程式才有可能是 impure 的。 至於其他的 monad 仍然保證函數的 purity,只是用 monad 的結構方便描述 所謂的 effect,但我們可以抽換所有 monad 換成一般基本的寫法。 假設我們要寫一個抽象的 imperative 語言的直譯器, 將程式用 Haskell 的型別定義,稱為 Program 的話,直譯器函數的型別可寫成 interpreter :: (Program, Memory) -> Memory 或是 interpreter :: Program -> Memory -> Memory 則對任意允許 side-effect 但排除 IO 的程式, 是一個將 "記憶體狀態" 對應到 "記憶體狀態" 的數學函數。 例如賦值可以寫成 interpreteer (x := e) m = write x (eval e m) m 其中 eval e m 計算用現有的狀態 m 來計算 expression e 的值, write 則回傳更新後的狀態。這邊「狀態」可以用 list 或是函數來代表。 而同樣的函數可以用所謂的 state monad 來改寫,在表達上會更簡潔而已。 有興趣的話,可以提供實際的範例。不過理解 monad 用到一年半載可能有些誇大了, 實際使用上學會用 IO monad 就可以寫些比較實務的程式。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 78.151.174.221
文章代碼(AID): #1IS5vmuJ (Programming)
文章代碼(AID): #1IS5vmuJ (Programming)