gpt4 book ai didi

list - Prolog:使用其他列表的重复元素构建列表

转载 作者:行者123 更新时间:2023-12-02 06:55:07 24 4
gpt4 key购买 nike

我需要构建一个接收列表的谓词,检查哪些是重复元素并返回其他列表。示例:

?- rep_elements([a,b,c,a,b,d], Xs).
Xs = [a,b].

我开始构建一个基本结构,但我现在不知道如何完成这个谓词,或者如果这是更好的方法:

exists(Elem, [Elem|_]).
exists(Elem, [H|T]) :-
exists(Elem, T).

rep_elements([], []).
rep_elements([H|T], [Y|Z]) :-
exists(H, T),
rep_elements(T, Z).

有什么建议吗?

最佳答案

首先,我建议我们使用一个更具描述性的谓词名称,list_uniqdups

我们根据 定义list_uniqdups/2 tpartition/4 , if_/3(=)/3 :

list_uniqdups([],[]).
list_uniqdups([X|Xs0],Ys0) :-
tpartition(=(X),Xs0,Es,Xs),
if_(Es=[], Ys0=Ys, Ys0=[X|Ys]),
list_uniqdups(Xs,Ys).

示例查询:

?- list_uniqdups([a,b,c,a,b,d],Xs).  % query as given by the OPXs = [a,b].                          % expected result?- list_uniqdups([a,c,b,a,b,d],Xs).  % similar queryXs = [a,b].                          % same result?- list_uniqdups([b,c,a,a,b,d],Xs).  % now, `b` comes before `a`Xs = [b,a].                          % retain the original order?- list_uniqdups([a,a,a,a,b],Xs).Xs = [a].                            % remove all duplicates

请注意,以上所有查询都确定性地成功。

关于list - Prolog:使用其他列表的重复元素构建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33180517/

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