list - Prolog、列表和对的新手

标签 list prolog

我是 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/

相关文章:

python - 编写一个在列表索引之间交替加号和减号的函数

python - 如何根据Python中以特定字符结尾的分隔符字符串拆分字符串列表?

error-handling - 在列表中捕获字符串的非法开头

list - 检查prolog中的两个连续参数

prolog - 用于简单传递性检查的不必要的谓词定义?

java - 从列表创建数组并初始化它 - Java

python - 在python中合并两个具有相同键的列表字典

python - 如果在 Python 的新列表中找到,则从 dict 中删除

Prolog -- 对称谓词

Prolog - 如何比较来自两个或多个不同谓词的结果?