嵐達網是一個為程式語言同好設置的中文社群網站。程式語言學原本即是計算科學之中有悠久傳統的重要類別。近年來,面對諸如並行處理等日益複雜的程式設計挑戰,不論學界或業界都再度對程式語言學感到興趣。
Haskell
假想今天我們要用 Haskell 寫一個 GUI 遊戲。遊戲的地圖上可能會有若干怪物,還有一個玩家,在地圖上的怪物出現在場上的時間不是一個固定的值(有可能是玩家消滅該怪物,或者是根據腳本可能會暫時消失),我們該如何維護地圖呢? 上述的遊戲其實就是 Patai Gergely 所撰寫的 Dungeons of Wor。他在寫 Dungeons of Wor 的時候發現他沒有一個好用的 Functional React Programming (FRP) 函式庫可以用,所以他自己寫了一個 Elerea 函式庫。Elerea 函式庫的主要目的就是要讓我們把 Signal 加入 SignalGen,再使用 replicateM 讓 Monad 執行若干次轉換,如果該次轉換滿足 Signal 的 delay,該 Signal 就會被列出來。 如果對與 Elerea 的設計與作者的想法有興趣的人可以參閱:Nothing Personal: Behind the Dungeons。 -- |
|||
Smoking fast Haskell code using GHC’s new LLVM codegen 不知道未來 GHC backend 會不會都換成 LLVM 呢? 由於沒有看得很懂,就不多做評論了 @@ |
|||
Jan van Eijck 與 Christina Unger 籌備中的新書 Computational Semantics with Functional Programming (將由 Cambridge University Press 出版) 手稿及相關補充資料(Haskell 程式、習題解答等)已全文上網。該書主題為計算語言學 --- 以計算觀點看自然語言的語意,但使用 Haskell 當作研究、實驗的工具。目錄:
|
|||
英國又有一個不錯的春季課程: Midlands Graduate School in the Foundations of Computing Science,為期一週、設計上是為博士班學生開設的密集課程,但也歡迎學者和有興趣的人士參加。 日期: 2010 年三月 28 日至四月一日。 課程:
|
|||
這是前一陣子出現在 Haskell mailing list 上的問題。大家都知道這是階層函數的定義:
為什麼下面這個函數 |
|||
Galois 的 Don Stewart 在 DEFUN 2009 中給了這場精彩的演講: Multicore Programming in Haskell Now! 裡頭逐項介紹了 Haskell 從 90 年代到最近引進的幾種平行/並行程式設計機制:
|
|||
ICFP 2009 (第 14 屆 ACM SIGPLAN 函數編程國際會議) 和部份周邊研討會,包括 Erlang Workshop, CUFP (函數編程之商業用途), Haskell Symposium, Haskell Implementer’s Workshop 等等的全程錄影已經上網了。據我所知這是 ICFP 第一次嘗試將演講錄影上網,希望以後也能一直這麼做下去。大家可由其官網連結中找到議程,影片則在 Malcolm Wallace 設置的 vimeo 相簿中。 幾天的會議中有很多精彩的演講。三場邀請演講分別由 Guy Steele 談映射摺疊與平行處理、Benjamin Pierce 談用 Coq 教程式語言、Dan Piponi 談單子、量子計算、與繩結(是的,他和做駭客任特效務拿奧斯卡獎的 Dan Piponi 是同一個人),都應有不同的聽眾會喜歡。覺得和技術論文有距離的人則可以看看 Peter Landin 紀念、Rod Burstall 得到 SIGPLAN 程式語言成就獎、99 年最有影響力論文獎等等感人場面,或著總是很好玩的 ICFP 程式設計比賽頒獎。猜猜今年哪個語言得獎? 技術論文方面,有趣的演講很多,大概要興趣相合才能理解了。若找到喜歡的題目,一場技術演講連問題只有 25 分鐘,算是很快的吸收資訊的方法(對講者而言要把演講濃縮成這樣就很辛苦了)。這邊只提一個: Ralf Hinze 的 La Tour D’Hanoï 講河內塔問題: |
|||
blog post: source code: |
|||
埃氏篩法(Sieve of Eratosthenes)是一個尋找質數的演算法。長久以來,下面的這個「埃氏篩法」程式已經被當作示範 lazy evaluation 可以讓程式多麼簡潔漂亮的標準範例: primes = sieve [2..] sieve (p : xs) = p : sieve [x | x <- xs, x `mod` p > 0] 不過,Melissa E. O’Neill 最近的論文 The Genuine Sieve of Eratosthenes 卻指出這並不是埃氏篩法!由於剔除非質數的方式不同,上面的程式效率遠比真正的埃氏篩法來得低。 是否能在兼顧程式簡潔度的情況下正確地實作埃氏篩法,並仍然產生無限長的質數串列呢?O’Neill 認為應該使用不同的資料結構,並且指出 functional programmer 對使用串列以外的資料結構也許抱著太保守的態度。有趣的是,O’Neill 和 Richard Bird 通信後,Bird 也提出了使用 lazy 串列的另一個演算法,使得本文讀來更有意思。 |
|||
Henning Thielemann 寫了一篇教學,關於如何寫 lazy 程式:
|
|||
