你是幾乎沒有的。您的基本情況(空列表)和您的第二條規則(交換X
Y
)基本上沒有問題(除了評論中指出的細節外)。但是,您錯過了的規則(交換Y
對於X
)。在你的最後一條規則中,你可能想要確保Z
不僅與X
不同,而且也與Y
不同,否則Z
將受制於規則二或三。
change(X, Y, [], []).
change(X, Y, [X|L], [Y|L1]) :-
change(X,Y,L,L1).
change(X, Y, [Y|L], [X|L1]) :- % <- vice versa case
change(X,Y,L,L1).
change(X, Y, [Z|L], [Z|L1]) :-
dif(X,Z), % <- neither X=Z
dif(Y,Z), % <- nor vice versa
change(X,Y,L,L1).
以下是一些示例查詢。 什麼[1,2,3,4]
樣子交換1
與2
反之亦然後?
?- change(1,2,[1,2,3,4],L).
L = [2,1,3,4] ? ;
no
什麼了[2,1,3,4]
樣子交換1
與2
反之亦然過嗎?
?- change(1,2,L,[2,1,3,4]).
L = [1,2,3,4] ? ;
no
哪些元素已經在[1,2,3,4]
被換,如果結果列表是[2,1,3,4]
?
?- change(X,Y,[1,2,3,4],[2,1,3,4]).
X = 1,
Y = 2 ? ;
X = 2,
Y = 1 ? ;
no
這功課嗎? – Enigmativity
而你並沒有改變兩個元素的位置。你正在取代元素。兩件不同的事情。 – Enigmativity
你應該嘗試一些然後告訴我們,而不是隻是要求我們爲你做這項工作。 –