如何从序言中的两个列表创建原子对列表?

发布于 2024-12-09 12:08:09 字数 574 浏览 0 评论 0原文

我是序言新手。 让我向您展示我想要的内容作为评论..

% ?-pair([1,2],[a,b],Result).
% Result= [{1,a},{1,b},{2,a},{2,b}].

我所做的是..

pair([],Q,[]).
pair(P,[],[]).
pair([A|P],[B|Q],[{A,B}|R]) :- pair([A|P],Q,R).
pair([A|P],[B|Q],[{A,B}|R]) :- pair(P,[B|Q],R).

通过这段代码,我达到了这样的结果:

?- pair([1,2],[a,b],R).
R = [{1, a}, {1, b}] ;
R = [{1, a}, {1, b}, {2, b}] ;
R = [{1, a}, {1, b}, {2, b}] ;
R = [{1, a}, {2, a}, {2, b}] ;
R = [{1, a}, {2, a}, {2, b}] ;
R = [{1, a}, {2, a}] ;
false.

我希望所有内容都在一行中而不重复..

I am new to prolog.
Let me show you what I want below as comment..

% ?-pair([1,2],[a,b],Result).
% Result= [{1,a},{1,b},{2,a},{2,b}].

and what I did is..

pair([],Q,[]).
pair(P,[],[]).
pair([A|P],[B|Q],[{A,B}|R]) :- pair([A|P],Q,R).
pair([A|P],[B|Q],[{A,B}|R]) :- pair(P,[B|Q],R).

with this code I reach such a result like this:

?- pair([1,2],[a,b],R).
R = [{1, a}, {1, b}] ;
R = [{1, a}, {1, b}, {2, b}] ;
R = [{1, a}, {1, b}, {2, b}] ;
R = [{1, a}, {2, a}, {2, b}] ;
R = [{1, a}, {2, a}, {2, b}] ;
R = [{1, a}, {2, a}] ;
false.

I want all in one line without repetitions..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别低头,皇冠会掉 2024-12-16 12:08:09

您应该向 Prolog 解释您想要什么(什么是对,如何构建它),然后要求 Prolog 找到所有对。

You should explain to Prolog what you want (what is a pair, how to build it), then ask Prolog to find all the pairs.

天荒地未老 2024-12-16 12:08:09

您可以通过列出 L1 中的所有对 A 和 L2 中的所有对 B 并在另一个列表中收集所有对 {A,B} 来做到这一点:

pair(L1, L2, Pairs):-
  findall({A,B}, (member(A, L1), member(B, L2)), Pairs).

?-pair([1,2],[a,b],Result).
Result = [{1, a}, {1, b}, {2, a}, {2, b}].

You can do it by listing all the pairs A in L1 and B in L2 an collecting all pairs {A,B} in an other list:

pair(L1, L2, Pairs):-
  findall({A,B}, (member(A, L1), member(B, L2)), Pairs).

?-pair([1,2],[a,b],Result).
Result = [{1, a}, {1, b}, {2, a}, {2, b}].
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文