gpt4 book ai didi

将输出合并到 Prolog 中的一个列表中

转载 作者:行者123 更新时间:2023-12-01 11:21:31 26 4
gpt4 key购买 nike

我有一个序言作业,要求我们列出两个给定范围内的所有数字对。我可以让它输出(使用一个函数)以下内容,但我不知道如何合并所有输出。这是调用函数的输出:

?- i(L,5,7).
L = [(5, 5), (5, 6), (5, 7)] ;
L = [(6, 5), (6, 6), (6, 7)] ;
L = [(7, 5), (7, 6), (7, 7)] ;

这是代码(间隔方法是教授定义的,不允许修改):

interval(X,L,H) :-
number(X),
number(L),
number(H),
!,
X>=L,
X=<H.

interval(X,X,H) :-
number(X),
number(H),
X=<H.

interval(X,L,H) :-
number(L),
number(H),
L<H,
L1 is L+1,

interval(X,L1,H).

i(L,X,Y):-
interval(N2,X,Y),
setof((N2,N),interval(N,X,Y),L).

我正在寻找这样的输出:

L = [ (5, 5), (5, 6), (5, 7), (6, 5), (6, 6), (6, 7), (7, 5), (7, 6), (7, 7)]

最佳答案

问题在于:

i(L,X,Y):-
<b>interval(N2,X,Y),</b>
setof((N2,N),interval(N,X,Y),L).

首先将N2设置为区间中的一个数字,然后您要求为该给定数字生成一个集合N2和一个变量号 N.

然而,您可以简单地在 setof/3 的目标中定义一个复合:

i(L,X,Y) :-
setof((N2,N),<b>(interval(N2,X,Y),</b>interval(N,X,Y)<b>)</b>,L).

不过,也许更优雅的方式(可能更 Prolog)是定义一个 interval_tuple/3 谓词:

interval_tuple(X,Y,(N,N2)) :-
interval(N,X,Y),
interval(N2,X,Y).

然后在那个谓词上调用你的 setof/3listof/3:

i(L,X,Y) :-
listof(Tup,interval_tuple(X,Y,Tup),L).

关于将输出合并到 Prolog 中的一个列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42166989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com