Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
prolog程序:比较两个列表';并返回列表1上的唯一元素列表_Prolog - Fatal编程技术网

prolog程序:比较两个列表';并返回列表1上的唯一元素列表

prolog程序:比较两个列表';并返回列表1上的唯一元素列表,prolog,Prolog,此程序比较两个列表的项,并返回一个列表,其中的项是第一个列表的成员,而不是第二个列表的成员。例如:list1=[a,b,d],list2=[r,a,f,b]--->result=[a,b] go:- comp([y,h,b],[b,t],R),!. comp([],_,_) :- !. comp(_,[],_) :- !. comp([H|T],B,_) :- memberchk(H,B),comp(T,B,_); comp(T,B,R),write([H]). 当前结果是[h][y] 我需

此程序比较两个列表的项,并返回一个列表,其中的项是第一个列表的成员,而不是第二个列表的成员。例如:
list1=[a,b,d],list2=[r,a,f,b]--->result=[a,b]

go:- comp([y,h,b],[b,t],R),!.

comp([],_,_) :- !.
comp(_,[],_) :- !.
comp([H|T],B,_) :- memberchk(H,B),comp(T,B,_); comp(T,B,R),write([H]).
当前结果是
[h][y]


我需要的结果应该是
[h,y]

您的请求是一个谓词,它返回一个列表,其中的项是第一个列表的成员,而不是第二个列表的成员。但你的例子是:

list1=[a,b,d], list2=[r,a,f,b] ----> result =[a,b]
返回一个包含两个列表(交叉点)中成员的列表的结果。我假设你想要你所要求的,而不是你的例子所显示的

在你的原稿中,你有:

comp(_, [], _).
如果您查询,比如说,
comp([a],]X)
,这将不会给出正确的结果,因为您使用的是“不在乎”术语,
。这是对您可能想要表达的内容的不当表达,即
comp(L,[],L)
(如果您从列表中排除空列表的元素,则列表本身就是一个列表)。此外,您的原始子句中没有一个实例化结果(它们都在该位置有“不在乎”
\uu

更正的版本可能如下所示:

comp([], _, []).
comp(L, [], L).
comp([H|T], S, R) :-
    (   memberchk(H, S)
    ->  comp(T, S, R)
    ;   R = [H|RT],
        comp(T, S, RT)
    ).

?- comp([y,h,b],[b,t],R).
R = [y, h] ;
false.

?-

请注意,键入
后的“false”响应表示没有其他解决方案。

在您的示例中:列表1=[a,b,d],列表2=[r,a,f,b]--->result=[a,b](看起来像是交集),列表1=[y,h,b],列表2=[b,t]--->rezult=[h,y](看起来像是集的差)。。。你需要哪一个??