我是 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]
AND 查询 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] ;
到目前为止,我只能从第一个查询中获取第一个结果来显示,仅此而已。我解决这个问题的最佳方法是什么?谢谢!
最佳答案
你的 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。
关于list - Prolog、列表和对的新手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16028938/