我遇到問題。我想實現一個替換(E1,L1,E2,L2)謂詞。 當L1和L2是相同的列表時,這是成立的,除了在L1具有值E1,L2具有E2的地方。另外,只有一個事件被替換,它必須以任何模式工作。錯誤:全局堆棧與追加/ 3
例如:
replace(2,[1,2,3,4],5,X)
應該只有溶液X = [1,5,3,4]
。
replace(2,[1,2,3,2,1],5,X)
應該回溯解決方案X = [1,5,3,2,1]
和X = [1,2,3,5,1]
。
replace(2,X,5,[1,5,3,5,1])
應回溯解決方案X = [1,2,3,5,1]
和X = [1,5,3,2,1]
。
replace(X,[a,b,c,d],Y,[a,e,c,d])
應該只有解決方案X = b, Y = e
。
replace(X,[1,2,3,2,1],Y,[1,5,3,5,1])
應該沒有解決方案(它 應該失敗)。
我的實現:
replace(E1, L1, E2, L2) :-
append(X, [E1|L_Tail], L1),
append(X, [E2|L_Tail], L2).
此代碼是罰款。但是,當replace(2,X,5,[1,5,3,5,1])
時,應返回X = [1,2,3,5,1]
和X = [1,5,3,2,1]
和false
。它只返回前兩個結果,並且false
沒有出現。該方案最終以ERROR: Out of global stack
。
鮑里斯嗨,它的工作原理。你的回答很清楚,組織良好。謝謝你太多了! –