作者reader (讀者)
看板PLT
標題Re: [閒聊] 邏輯式語言與函數式語言
時間Sun Feb 25 13:39:56 2007
※ 引述《ephesians (ephesians)》之銘言:
: 最近在涉獵另一種程式語言流派,
: 不是天流地流與神流,不是二刀流,也不是人稱一流劍一流,
: 是一種叫做函數式語言 (functional programming language) 的.
: 先聲明,因為以往工作與學習環境並不熟悉這東西的實作,
: 以下凡談到底層,含編譯/直譯等,都是胡扯瞎掰的.
: 如果有幸,將來可能有機會實作.
: 函數式語言的特色就是函數定義,寫完函數,程式就寫完了.
: 跟傳統程式語言 (結構化程式) 有什麼差別呢?
: 按數學來講,函數是指將定義域映射到值域,
: 而傳統程式語言的函數,除了映射之外,
: 還多了很多東西, (流程控制,例外處理,資源管理...等)
: 所以更稱為函式.
: 函數式語言沒有指定敘述,沒有副作用 (side effect), 也沒有流程控制.
這應該是指 purely functional programming language 才是這樣。
像 Haskell 和 Clean 都是,這十年來 Haskell 當紅,成為函數式語言的
代表性語言,所以才讓人覺得函數式語言都是這樣。
但實際上 "不純" (impure) 的函數式語言反而比較多,像早年比較熱門的
LISP, Scheme 到 ML, 或總是被當成明日之星,卻始終沒起色的 Erlang,
都不是純函數式語言。
而在 OO 熱門之後,像是 CLOS, Dylan, Objective Caml 這類結合 OO 的
函數式語言,也都流行過一陣子。
拋開學生最愛的 Haskell 不談 (若無 lazy evaluation 的出現,純函數式
語言幾乎被認為是一種無用的學院派程式語言) ,商業上最成功的 Common
Lisp, 就是什麼都有的,以函數式語言為主的混合式語言。
: 至於實作層面,不管是直譯或編譯皆可,想必都要附加一份引擎.
: (流程控制不是該煩惱的事,函義/語意才是.)
所以 Logic Programming 一般都不會被通用程式語言的設計當中被考慮,
只是早年人工智慧當紅時,被當成四大程式設計典範,而總是在教科書中
佔有一席之地,實際上已經是歷史陳跡等級的東西了。
或者講得狠一點,作為電腦科學史上最耗錢最無用計劃之一的第五代電腦
計劃之核心語言的 Prolog, 是程式語言發展史的一大誤區,不能說沒用,
但只怕在學習時得在心裡多存著幾分警惕,那許諾的烏托邦是不存在的。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.222.173.26
1F:推 ephesians:受教 02/25 14:47
2F:推 YuYuHo:以前用prolog時,嚇到,感覺像是兩光版的sql. 02/25 20:21
3F:推 caml:去年我搞了prolog一年﹐比較愚鈍﹐感覺這個語言不flexible 02/26 17:27