的具體化謂詞變體的冗餘答案我想爲本論壇中的某些 other recent problem提供一個邏輯純解決方案。追加/ 3
作爲開始,我實施了append/3
的物化變體,並將其命名爲appendR/4
。它是基於@false在Prolog union for A U B U C實施的謂詞if_/3
和(=)/3
:
appendR([],Ys,Zs,T) :-
=(Ys,Zs,T).
appendR([X|Xs],Ys,ZZs,T) :-
if_([X|Zs] = ZZs, appendR(Xs,Ys,Zs,T), T = false).
實現基本的工作,如通過如下所示的查詢:
?- appendR([1,2],Ys,[2,3,4],T).
T = false ? ;
no
?- appendR([1,2],[3,4],Xs, T).
T = true, Xs = [1,2,3,4], ? ;
T = false, Xs = [1,2|_A], prolog:dif([3,4],_A) ? ;
T = false, Xs = [1|_A], prolog:dif([2|_B],_A) ? ;
T = false, prolog:dif([1|_A],Xs) ? ;
no
到目前爲止,一切都很好...這裏來棘手的部分:
?- appendR([1,2],Ys,[1,2,3,4],T).
T = true, Ys = [3,4] ? ;
T = false, prolog:dif(Ys,[3,4]) ? ;
T = false, prolog:dif([2|_A],[2,3,4]) ? ;
T = false, prolog:dif([1|_A],[1,2,3,4]) ? ;
no
我想得到前兩個答案,但不是最後兩個。請幫助!
我仍然不知道一個好的答案,但暫時事實上'append([],Xs,Xs).'是一個有意的概括。我不確定它是否有意義來統一泛化本身。 – false 2015-10-24 22:38:35