Prolog 代碼由事實、規則、查詢組成。大寫字母/下劃線開頭為變量,`: -` 相當於 if,逗號相當於 and。QuickSort 實現僅需定義 partition 與 qsort 規則,無變量賦值、迭代、流程控制代碼——同屬聲明式,比過程式綽綽有餘簡潔。
三代家譜判斷任意兩人關係。Java 版需大量 if-else 分支、次序敏感、擴展困難(加入姻親、更多代數、複雜關係時代碼極其脆弱)。Prolog 版僅定義規則(父母、祖孫、平輩、旁系、姻親、曾祖)與事實,新增關係只需加規則事實,不影響原有代碼,結構穩固、極易擴展。
邏輯式無明顯輸入/輸出分別。同一程序既可判斷兩人關係,又可反向查詢「誰是某人的曾孫」。查詢 `relation(R,a,ds)` 得 `father_in_law`;查詢 `great_grandparent(pa,X)` 列出所有曾孫。
Wirth 名言「算法 + 數據結構 = 程序」刻畫過程式思想。Kowalski 提出「算法 = 邏輯 + 控制」:邏輯是核心,控制用於改進效率。邏輯式編程中,程式設計師只表達邏輯,控制交給解釋器/編譯器管理——大大減輕負擔,代碼更簡潔抽象、副作用少。
Prolog 引擎多基於 Rete 算法正向推理(自底向上),適合不同輸入作不同反應。Java 整合途徑:JNI 橋接(如 JPL 連接 SWI-Prolog)、JVM 上實現(如 JIProlog、JLog 提供雙向 API)、源代碼轉換工具(Prolog Café 轉 Java、P# 轉 C#)。
