假設我有list(A,X,Y,R),我想從A中得到X和Y兩個不同的值,所有其他的A值都進入R。
我怎樣才能做到這一點呢?
舉例說明
?- list([],X,Y,R)。false。
?- list([1],X,Y,R)。false。
?- list([1,2], X,Y,R)。X=1, Y=2, R=[]。
X=2, Y=1, R=[]。
?- list([1,1],X,Y,R) 。X=1, Y=1, R=[]。
X=1, Y=1, R=[].
?- list([1,2,3], X, Y, R). X=1, Y=2, R=[3] 。
X=1, Y=3, R=[2] 。
X=2, Y=1, R=[3] 。
X=2, Y=3, R=[1] 。X=3, Y=1, R=[2] 。X=3, Y=2, R=[1] 。
uj5u.com熱心網友回復:
好的,這里你有一個一般的解決方案。我已經在SWI-prolog中試過了,但是如果任何謂詞對你來說都不適用,至少你可以尋找一個等價物:
list([A,B|T]/span>, X, Y, T) :-
permutation([A,B], [X, Y])。
list([A,B|T], X, Y, [D|R] ) :-
permutation([C, D], [A,B])。
list([C|T], X, Y, R)。
分解:
- 基本情況。
X和Y是任何順序中的兩個第一元素。R將是串列的尾部。 - 遞回情況。從前兩個元素中挑選一個(
D),并在再次嘗試之前將其從串列中洗掉,然后將其添加到R。
它通過了你給出的例子,盡管解決方案沒有按照你寫的順序被檢索。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/308567.html
標籤:
下一篇:Flutter-Firestore將Stream<List<DocumentSnapshot<Map<String,dynamic>>>>轉化為List
