Re: [閒聊] 邏輯式語言與函數式語言

看板PLT (程式語言與理論)作者 (讀者)時間17年前 (2007/02/25 13:39), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串2/7 (看更多)
※ 引述《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

02/25 14:47, , 1F
受教
02/25 14:47, 1F

02/25 20:21, , 2F
以前用prolog時,嚇到,感覺像是兩光版的sql.
02/25 20:21, 2F

02/26 17:27, , 3F
去年我搞了prolog一年﹐比較愚鈍﹐感覺這個語言不flexible
02/26 17:27, 3F
文章代碼(AID): #15uI4jc1 (PLT)
討論串 (同標題文章)
文章代碼(AID): #15uI4jc1 (PLT)