我是Prolog的新手,我很难理解一些机制是如何工作的。现在我正在尝试处理一个特定的问题。
我需要从单个列表中找到所有可能的对,因此我正在尝试定义规则select_pairs(X,Y,_,Z)。
以下是我在运行给定查询时希望看到的内容。
查询:select_pairs(X,Y,[1,2,3],Z)。返回以下内容:
X = 1, Y = 2, Zs = [3] ;
X = 1, Y = 3, Zs = [2] ;
X = 2, Y = 1, Zs = [3] ;
X = 2, Y = 3, Zs = [1] ;
X = 3, Y = 1, Zs = [2] ;
X = 3, Y = 2, Zs = [3]
和查询select_pairs(1,2,Xs,[3])。返回以下内容:
Xs = [1, 2, 3] ;
Xs = [2, 1, 3] ;
Xs = [1, 3, 2] ;
Xs = [2, 3, 1] ;
Xs = [3, 1, 2] ;
Xs = [3, 2, 1] ;
截至目前,我只能从第一个查询中获得第一个结果,而不是更多。我最好的办法是什么?谢谢!
答案 0 :(得分:2)
你的Prolog应该附带select / 3,这是一个内在的,它的名字正是这样做的:
?- select(X,[1,2,3],R).
X = 1,
R = [2, 3] ;
X = 2,
R = [1, 3] ;
X = 3,
R = [1, 2] ;
false.
它也可以“倒退”
?- select(1,R,[2,3]).
R = [1, 2, 3] ;
R = [2, 1, 3] ;
R = [2, 3, 1] ;
false.
然后,为了得到一个有效的select_pairs / 4,你可以组合2 select / 3。