在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中将两个列表映射在一起的主要内容,如果未能解决你的问题,请参考以下文章