第一個StackOverflow問題。序言遞歸和終止
我在prolog中寫了一個帶三個參數的謂詞。它們分別是一個字符,一個字符串列表,最後一個參數是第二個參數中以第一個參數開頭的所有字符串的列表。我的寫作陳述取代了我完全缺乏關於如何在SWI-Prolog中追蹤的知識。無論如何,在代碼!
startString(C, [H1|T1], [H2|T2]) :-
atom_chars(H1, [C| _ ]),
H2 = H1,
startString(C, T1, T2).
startString(C, [ _ |T1], Y) :-
startString(C, T1, Y),
write(foo).
startString(_, [], []) :-
write(foo).
,輸出:
foofoofoo
X = [some, simple]
我的方法是正確的,但謂語不終止(後缺乏時期寫X不是一個錯誤)。我的問題是,爲什麼不呢?從我在互聯網上發現的遞歸的有限範例中,我的謂詞的第三個版本應該終止謂詞並使x成爲一個確定的答案。
當我按回車時,我可以輸入另一個查詢,但我在同一個程序中編寫的另一個謂詞中有同樣的小問題。對這個謂詞的任何幫助也應該延續到另一個。謝謝!
我找到了解決我的問題的方案,它與cut相關,這是一個複雜的話題,我仍然不完全確定我的理解,但是將其添加到我的謂詞版本的末尾,可以讓序言「停止」我想要的方式。與re有很大關係詛咒和我選擇解決這個問題的方法。感謝您的深入解答,它將幫助我完成我擁有的其他序言作業! – Ryanman 2012-02-17 03:35:33