如何对列表列表中的任何元素求和,并在prolog中等于5



我是学习Prolog的新手。我想完成下面的谓语。

equalto5([[1,'a'],[3,'b'],[2,'b'],[1,'b'],[4,'c']], X) --input

删除列表中第一个元素的所有重复数字,不要删除第二个元素的重复字母。

像这样:equalto5([[1,'a'],[3,'b'],[2,'b'],[4,'c']], X)

然后基于列表列表中的第一个元素找到等于5的所有可能结果

X =[1,4]; [2,3]. 
equalto5(List, X) :-
findall(Num, member([Num, _], List), Ns_dupes),   % numbers from nested lists.
sort(Ns_dupes, Ns),    % sort/2 also deduplicates.
member(N1, Ns),        % look for N1 from the numbers ...
member(N2, Ns),        % and N2 ...
dif(N1, N2),           % which are different ...
5 is N1 + N2,          % and sum to 5.
X = [N1, N2].

最新更新