2016年1月30日 星期六

The Roots of Lisp 讀後心得

兩年前我曾經想讀這篇 The Roots of Lisp (ref. 使用perl及mozrepl操控firefox,以及repl的引入 ), 今天再細讀了一次,總算大概明白了作者想要講的東西。

資料(data)可以變成程序(procedure)

因為資料是演算的對象、結果(=>客體),如果我們可以將它變成 procedure ,那麼 procedure 就變成是有因時制宜能力的、有智慧的程式,那不就是人工智慧(AI)了嗎?以結果論的話,那就是程式產生程式。至於中間是一定要經過演算的,那麼演算的對象、結果是以資料的形式存在,如何將結果用來產生程式?那就是 The Roots of Lisp 當中的 "eval." 求值函數的作用(之一)了。

你可能會問說那 procedure 可不可以變成 data 呢?當然可以,不過那是沒有意義的,因為 procedure 是演算的主體,它本身不承載演算的對象、結果,因此演算前後它不會變動,那麼把它變成 data 是無謂的。

當然以 John McCarthy 的所處年代,他看到的東西未必和 Paul Graham 或今日的我們看到的東西是一樣的。他做的是試圖把演算"公理化",而結果就是一套演算法/公理,只要基本的 7+2 個基本算子,就可以建構出任意複雜度的演算/程式。求值函數除了求得函數值以外,還可以把資料(函數的定義)變成程序,而在執行期賦予程式高度的可變性。

所以其實到 programming 這端其實有沒有用 eval. 其實已經不重要,在整個 Lisp 的環境中, eval. 已經默默的工作了許久了…


沒有留言:

張貼留言