Prolog 如何删除列表中连续重复的原子
我想在prolog中删除列表中的连续重复项。我不熟悉这门语言,所以我很难理解每件事是如何运作的。到目前为止,我想到的是:Prolog 如何删除列表中连续重复的原子,prolog,declarative,Prolog,Declarative,我想在prolog中删除列表中的连续重复项。我不熟悉这门语言,所以我很难理解每件事是如何运作的。到目前为止,我想到的是: remove_con_dups([X],L) :- L = X. remove_con_dups([X,Y|_],L) :- X \= Y, L = X. remove_con_dups([_|T],L) :- remove_dups(T,L). 到目前为止,如果我查询remove_con_dups([a,a,a,b,b,a,c],X),它将给出这些值 X = a, X =
remove_con_dups([X],L) :- L = X.
remove_con_dups([X,Y|_],L) :- X \= Y, L = X.
remove_con_dups([_|T],L) :- remove_dups(T,L).
到目前为止,如果我查询remove_con_dups([a,a,a,b,b,a,c],X),它将给出这些值
X = a,
X = b,
X = a,
X = c.
我想要的是
X = [a,b,a,c].
我就是想不通。有什么帮助吗
谢谢
完全定义第二个参数,L
,关于它与第一个参数的连接
remove_con_dups( [X,Y|_], LL) :- X \= Y, L = X, LL = [L|T].
部分地将第二个参数“LL
”定义为一个列表,其头部带有L
剩下的就是说说它的尾巴,T
:
remove_con_dups( [X,Y|R], LL) :- X \= Y, L = X, LL = [L|T],
remove_con_dups( R, T).
上述观点可能并不完全正确。是R
?是不是[Y | R]
?这由你来定义
完全定义第二个参数,L
,关于它与第一个参数的连接
remove_con_dups( [X,Y|_], LL) :- X \= Y, L = X, LL = [L|T].
部分地将第二个参数“LL
”定义为一个列表,其头部带有L
剩下的就是说说它的尾巴,T
:
remove_con_dups( [X,Y|R], LL) :- X \= Y, L = X, LL = [L|T],
remove_con_dups( R, T).
上述观点可能并不完全正确。是
R
?是不是[Y | R]
?这由你来定义。我认为如果你只处理正面的情况,丢弃模式匹配看到的第一个副本(即头部形状),可能会更简单:
这个片段需要在某个地方切割,我将留下一个简单的练习来找到插入它的位置。我认为如果你只处理正面的情况,丢弃模式匹配看到的第一个副本(即头部的形状),可能会更简单:
这个片段的某个地方需要一个切口,作为一个简单的练习,我将留下来找到插入它的位置。嗨,我仍然无法得到它,我将它重写为remove_con_dups([X,Y | | |,ll]:-X\=Y,ll=[X | Y]。移除重复(T,L):-移除重复(T,L)。当然,这并不是一个完整的解决方案,只是给你一个开始的提示。请参阅另一个答案,了解几乎完整的代码。嗨,我仍然无法获得它,我将其重写为remove_con_dups([X,Y | | | |,LL):-X\=Y,LL=[X | Y]。移除重复(T,L):-移除重复(T,L)。当然,这并不是一个完整的解决方案,只是给你一个开始的提示。请参阅另一个答案,以了解近乎完整的代码。