在prolog中将两个列表映射在一起

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在prolog中将两个列表映射在一起相关的知识,希望对你有一定的参考价值。

我有两个事实是x(a,b,c)和g(x,y,z)。

我想创建一个规则来打印所有可能的答案,这样如果我从第一个事实中选择一个成员并将其与第二个事实中的成员匹配,那么我就无法将第一个事实中的另一个成员与该成员中的同一成员相匹配之前匹配的第二个事实,例如[a,x],[b,x]是不可接受的。

... X = [[a,x],[b,y],[c,z]]

... X = [[a,y],[b,z],[c,x]]

... X = [[a,z],[b,x],[c,y]]

.
.
.

你得到了我希望的观点,我认为应该有9个。

答案

为什么你认为样品中应该有9个?应该有6个:

:- use_module(library(lambda)).

?- maplist(\K^V^KV^(KV = K-V), [a,b,c], Rs, LRs), permutation([x,y,z], Rs).
   Rs = [x,y,z], LRs = [a-x,b-y,c-z]
;  Rs = [x,z,y], LRs = [a-x,b-z,c-y]
;  Rs = [y,x,z], LRs = [a-y,b-x,c-z]
;  Rs = [y,z,x], LRs = [a-y,b-z,c-x]
;  Rs = [z,x,y], LRs = [a-z,b-x,c-y]
;  Rs = [z,y,x], LRs = [a-z,b-y,c-x]
;  false.

以上是关于在prolog中将两个列表映射在一起的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 Scala 中将两个以上的列表压缩在一起吗?

在prolog中将基数10转换为基数2

在 Cloudinary 中将两个图像链接在一起的方法

Python代码阅读(第26篇):将列表映射成字典

如何在 Prolog 回溯期间获取值列表?

Prolog中的列表练习列表