要列出的 Prolog 子集 Return 个值
Prolog Subset Return Values To List
我正在尝试return另一个列表中的某个列表的子集对其进行一些操作,我的查找子集的代码如下:
listSubset([] , []).
listSubset([Head|Tail] , [Head|Subset]) :-
listSubset(Tail, Subset).
listSubset([Head|Tail] , Subset) :-
listSubset(Tail, Subset).
但是此代码仅在屏幕上打印子集,并且每当我尝试使用 append 将每个子集追加到另一个列表中时,代码都无法按预期工作。
我尝试使用追加的方法之一:
listSubset([] , [], AllSubSets).
listSubset([Head|Tail] , [Head|Subset], AllSubSets) :-
appendx([[Head|Subset]], AllSubSets, NewAllSubSets),
listSubset(Tail, Subset, NewAllSubSets).
listSubset([Head|Tail] , Subset, AllSubSets) :-
listSubset(Tail, Subset, AllSubSets).
appendx([],List,List).
appendx([H|T],List,[H|T2]) :-
appendx(T,List,T2).
问题在于您将子集附加到列表的位置。这应该可以正常工作
listSubset([] , [], AllSubSets).
listSubset([Head|Tail] , [Head|Subset], AllSubSets) :-
appendx([[Head|Subset]], AllSubSets, NewAllSubSets),
listSubset(Tail, Subset, NewAllSubSets).
listSubset([Head|Tail] , Subset, AllSubSets) :-
appendx(Subset, AllSubSets, NewAllSubSets),
listSubset(Tail, Subset, AllSubSets).
appendx([],List,List).
appendx([H|T],List,[H|T2]) :-
appendx(T,List,T2).
要将一个集合的所有子集收集到一个列表中,只需问:
?- findall(S, listSubset([a,b,c],S), L).
L = [[a, b, c], [a, b], [a, c], [a], [b, c], [b], [c], []].
我正在尝试return另一个列表中的某个列表的子集对其进行一些操作,我的查找子集的代码如下:
listSubset([] , []).
listSubset([Head|Tail] , [Head|Subset]) :-
listSubset(Tail, Subset).
listSubset([Head|Tail] , Subset) :-
listSubset(Tail, Subset).
但是此代码仅在屏幕上打印子集,并且每当我尝试使用 append 将每个子集追加到另一个列表中时,代码都无法按预期工作。
我尝试使用追加的方法之一:
listSubset([] , [], AllSubSets).
listSubset([Head|Tail] , [Head|Subset], AllSubSets) :-
appendx([[Head|Subset]], AllSubSets, NewAllSubSets),
listSubset(Tail, Subset, NewAllSubSets).
listSubset([Head|Tail] , Subset, AllSubSets) :-
listSubset(Tail, Subset, AllSubSets).
appendx([],List,List).
appendx([H|T],List,[H|T2]) :-
appendx(T,List,T2).
问题在于您将子集附加到列表的位置。这应该可以正常工作
listSubset([] , [], AllSubSets).
listSubset([Head|Tail] , [Head|Subset], AllSubSets) :-
appendx([[Head|Subset]], AllSubSets, NewAllSubSets),
listSubset(Tail, Subset, NewAllSubSets).
listSubset([Head|Tail] , Subset, AllSubSets) :-
appendx(Subset, AllSubSets, NewAllSubSets),
listSubset(Tail, Subset, AllSubSets).
appendx([],List,List).
appendx([H|T],List,[H|T2]) :-
appendx(T,List,T2).
要将一个集合的所有子集收集到一个列表中,只需问:
?- findall(S, listSubset([a,b,c],S), L).
L = [[a, b, c], [a, b], [a, c], [a], [b, c], [b], [c], []].