PLT 板


LINE

看板 PLT  RSS
最近在涉獵另一種程式語言流派, 不是天流地流與神流,不是二刀流,也不是人稱一流劍一流, 是一種叫做函數式語言 (functional programming language) 的. 先聲明,因為以往工作與學習環境並不熟悉這東西的實作, 以下凡談到底層,含編譯/直譯等,都是胡扯瞎掰的. 如果有幸,將來可能有機會實作. 函數式語言的特色就是函數定義,寫完函數,程式就寫完了. 跟傳統程式語言 (結構化程式) 有什麼差別呢? 按數學來講,函數是指將定義域映射到值域, 而傳統程式語言的函數,除了映射之外, 還多了很多東西, (流程控制,例外處理,資源管理...等) 所以更稱為函式. 函數式語言沒有指定敘述,沒有副作用 (side effect), 也沒有流程控制. 可想而知,遞迴是函數式語言常用的東西,因為遞迴有隱性的流程控制功能. 這時候可能看棺...呃,看倌們會想到函數式語言程式有多慢, 但因為函數式語言沒有副作用,意指一個子函數只做它該做的事,其他不多做. 譬如隔壁 p 版正在討論的 int x=12; x=x+++++x; 疑義, 在函數式語言的世界是完全無效的! 哪個子運算式/子函數先計算,結果都一樣. 因此,一份函數呼叫可以被自由代換為它的函數內容,不改其義. 遞迴函數很慢,展開成非遞迴函數就快多了. (甚至或許底層不需要有傳統語言編譯器的函式控制記憶區) 函數式語言之所以沒副作用,那是因為所有的變數一使用就不改其值. 沒有指定敘述可以修改變數內容. 接下來再講講邏輯式語言, (logical programming language) 邏輯語言的基本構件是邏輯式. 用過 Prolog 的人也許會覺得 a :- b, c. 是規則, (if b and c then a) 但這樣很容易陷入規則式推論系統的框架中,誤以為一旦使用 Prolog, 就非得實作規則式推論系統. 事實上,那是 !b || !c || a 這般邏輯式 (此式借用C的符號), 稱為Horn clause. (Horn clause到底怎麼翻譯啊? 角句嗎?) 邏輯式語言的程式,就是許多邏輯式的集合, 稱為演繹式資料庫 (deductive database, DDB). 邏輯式語言的計算,在於掌握解集. (answer sets, 答案集) 回想范式圖 (Van diagram), 如果你有一則邏輯式 a :- (意指 a 恆真;已知 a), 你就會將一張代表宇集 U 的白紙劃為兩半,一半在線圈內,屬於 a/true 的範圍, 另一半在線圈外,屬於 ﹁a/false 的範圍. 當你有另一則邏輯式 b :-, 就在紙上畫另一個線圈. 加上一則邏輯式 c :- a, b, 是讓 a 線圈與 b 線圈有個交疊部份. 計算一則問題 ?- c 是與解集周旋,通過邏輯式的交叉火網,在那張白紙上畫地圖. 有些問題經計算後,會得到多種解集,譬如: 在DDB a :- ﹁b, c. b :- ﹁a, c. 中, 詢問 c 會得到 {a, ﹁b} 或 {﹁a, b} 二種解集. 解集的計算,稱為解集規劃 (answer set programming). 演繹式資料庫已經有一串發展脈絡,隨著邏輯式可用符號的增加,解集規劃也更複雜. 按著發展脈絡及系統層次,簡單地介紹於下: 1. DDB: 這個層次很低,很單純,沒有否定的述詞 (predictive). 2. Monotonic DDB: 改良 DDB 的缺點,增加了 ﹁ 符號, 其語意是指某述詞的存在不成立. * DDB 與 MDDB 的層次相同,之後則是一層高於一層. 3. Extended Logic Programming (eLP, XD): ﹁ 符號的語意不夠完整. (試想想 "我不喜歡你" 與 "我沒有喜歡你" 的差別.) 因此,新的 not 符號誕生了,任務是明確表達某述詞的存在不存在都未定義. 述詞的否定符號優先順序是先判斷 not 述詞是 unknown, 再判斷 ﹁ 述詞是真的沒有. 4. Disjunctive Logic Programming: 終於可以使用 or 符號了. 5. Epistemic Logic Programming: 再加上一些很高階的符號, 例如 K 代表已知為真 (it's Known to be true), M 代表必須為真 (it Must be true) 至於實作層面,不管是直譯或編譯皆可,想必都要附加一份引擎. (流程控制不是該煩惱的事,函義/語意才是.) 相較之下,傳統程式語言不需要附加引擎,不過,所寫的程式本身就是引擎. 你要先把引擎的流程控制/副作用搞定. 辛苦的程式工人啊! --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.224.119
1F:推 semop:Horn clause 是以 Alfred Horn 為名的... 02/25 14:10
2F:→ ephesians:所以應該稱為Horn的句子 02/25 14:44







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP