目前我覺得非常中肯且值得特別一一去了解,並且在 coding 時,時時提醒自己的 Functional Programming Paradigm,如下:
First-class function Higher-order function Lexical closure Pattern matching Single assignment Lazy evaluation Garbage collection Type inference Tail recursion List comprehension Monad 其中 Python 有提供的,有第 1, 2, 3 (部分?), 6, 7, 8 (部分?), 10, 11 (部分?),就我微薄的知識所了解後的,可能會有一些出入。
目前的感想是,與 function 有直接關係的功能,對於一個剛入門 FP,想學習怎麼做到 paradigm shift 的人來說,是最最直接,最容易感受到不一樣的地方。(其實,本來也就應該是這樣的啦,不然幹麻叫做 functional programming?)透過功能 1, 2, 3, 10 這幾點,就可以開始去體驗所謂的:
A program is some specific combination and arrangement of functions, which are also some sort of combination of other functions.
Peter Norvig 在他的個人網站上頭,寫了一篇 (How to Write a (Lisp) Interpreter (in Python))(註), 他寫了約莫 100 行的 python script 來小小模擬一個簡化版的 Lisp Interpreter,看了不禁拍案叫絕。 下頭這個表格截取自他的網頁,指出他這 100 行的程式碼,所實作的 syntax 只有 9 個(註)。
var, variable reference
A symbol is interpreted as a variable name; its value is the variable’s value.
Example: x
number, constant literal
A number evaluates to itself.
Examples: 12 or -3.45e+6
(quote exp), quotation
Return the exp literally; do not evaluate it.
我們這個地球上的人實在太多了,加上上天賦與我們的大腦又過於活躍,以致於時時可以聽聞到,又有什麼人做出了驚人之舉。
幾個禮拜前,無意間得知一個網頁:Random CG Paper Generator。每 reload 這個頁面一次,就會亂數產生一篇圖學論文的標題出來(以假亂真似地)。也許,苦於找不到研究方向的研究生,可以來這個頁面 reload, re-roll your brain,看看有沒有什麼意外的研究靈感可以借用的。
Anyway,借用一個這樣的 random stuff generator 來找點子,實在太冒險也太不明智了,況且,我還處於 non-qualified Ph.D. student,沒啥理由理會這個網站的。除非…
我想知道它是怎麼產生這些以假亂真的論文標題。
在與 Edward 來來回回,反反覆覆的 email 往來後,終於,他了解我的目的了。Ed 建議我用 Lisp 來試著解解看這個問題。一方面 Ed 最近一直在寫 Lisp program,而 Lisp 又是號稱 functional programming languages 裏頭的元老之一,很擅長處理這類 AI 相關,或是 NLP(Natural Language Processing)相關的問題;另一方面,我剛好也在鑽研 FP,想多一些小而美的例子好讓自己的手變得髒一些(黑手),從中了解一下 FP 的特色。於是就開工了。
透過 MacPorts 安裝好 SBCL (Steel Bank Common Lisp) 與 Emacs 後,自 Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp 這本書的網站上,下載了書中提到的一些程式碼。試圖用裏頭的一些函式與方法來解決,或是某種程度上“逼近“我想要處理的這個問題。非常遺憾的,PAIP 的程式碼,似乎是給老舊的 Common Lisp 用的,而 SBCL 與他沒有很合,會一直出現一堆 warnings,得一直按 continue/ignore 之類的@@
書都出了:Day & Night.
誰說像 Quicksort 這種東西,不能以一種很有趣的方式呈現的?
Quicksort 是學習演算法過程中,第一個讓人覺得很過癮,很神奇的入門磚。在了解(半了解也行)了 Quicksort 的解法與精神後,有不少人選擇離開處處都是大老歐(Big O)的世界,投往其它 computer science 的領域,只留下少少幾位為了證明自己的天資聰穎的學生(just kidding)。
我在 dload 那看到一篇文章,裏頭有個非常讓人感到不意外的圖。
這是個來自某個單位,針對 2010 桌上型電腦使用的作業系統所做的一個統計,統計中指出,Microsoft Windows OS 依舊佔了 90% 有餘的市場,Mac OS 佔了 5%,Linux 非常糗地,只佔了不到 1%!
有趣的是,我使用了 Linux Desktop OS 快六年了,一點一點被它感化,居然就這樣默默接受了 :o
PS. Linux 在行動裝置上的佔有率,倒是靠 MeeGo 與 Android 而有不錯的成績。
讓人覺得愈加喜愛~
Refer to Dracula2 by gource