司法三等申論題
107年
[檢察事務官電子資訊組] 程式語言
第 一 題
📖 題組:
五、考慮以下 Prolog 程式: mystery([], []). mystery([X|Y], [X, X|Z]) :- mystery(Y, Z). (一)以上函式(function)mystery 的功能為何?(5 分) (二)以下目標的結果是什麼?必須顯示所有跟蹤步驟(tracing steps)。(5 分) mystery([1, 2, 3], X).
五、考慮以下 Prolog 程式: mystery([], []). mystery([X|Y], [X, X|Z]) :- mystery(Y, Z). (一)以上函式(function)mystery 的功能為何?(5 分) (二)以下目標的結果是什麼?必須顯示所有跟蹤步驟(tracing steps)。(5 分) mystery([1, 2, 3], X).
📝 此題為申論題,共 2 小題
小題 (一)
以上函式(function)mystery 的功能為何?(5 分)
思路引導 VIP
遇到 Prolog 遞迴程式,應先拆解為基本條件(Base case)與遞迴規則(Recursive step)。觀察輸入 [X|Y] 與輸出 [X, X|Z] 的模式對應,即可發現程式是將頭部元素 X 變成兩個 X,藉此推導出整體巨觀功能。
小題 (二)
以下目標的結果是什麼?必須顯示所有跟蹤步驟(tracing steps)。(5 分)
mystery([1, 2, 3], X).
思路引導 VIP
看到 Prolog 程式追蹤題,核心在於掌握「模式匹配(Unification)」與「遞迴(Recursion)」機制的運作。解題時應依序寫下每次遞迴的串列頭部(Head)與尾部(Tail)分離過程,明確標示每層遞迴的變數綁定(Binding),最後到達 Base case 後再反向回代(Back-substitution)組裝出最終答案。