List Prolog列表中正好有一对

List Prolog列表中正好有一对,list,prolog,List,Prolog,有人知道我如何确定/确保prolog列表中只有一个重复的元素吗 我正在准备考试。使用Sort/2对列表进行排序。它会删除重复项,因此,如果排序后的列表正好短一个,则只有一对 one_duplicate(L) :- sort(L, Sorted), length(L, Len), length(Sorted, SortedLen), Len =:= SortedLen + 1. 查找重复对是另一个问题。使用Sort/2对列表进行排序。它会删除重复项,因此,如果排序

有人知道我如何确定/确保prolog列表中只有一个重复的元素吗


我正在准备考试。

使用
Sort/2对列表进行排序。它会删除重复项,因此,如果排序后的列表正好短一个,则只有一对

one_duplicate(L) :-
    sort(L, Sorted),
    length(L, Len),
    length(Sorted, SortedLen),
    Len =:= SortedLen + 1.

查找重复对是另一个问题。

使用
Sort/2对列表进行排序。它会删除重复项,因此,如果排序后的列表正好短一个,则只有一对

one_duplicate(L) :-
    sort(L, Sorted),
    length(L, Len),
    length(Sorted, SortedLen),
    Len =:= SortedLen + 1.
one_duplicate(L) :-
    sort(L, Sorted),
    length(L, Len),
    length(Sorted, SortedLen),
    Len =:= SortedLen + 1.

找到重复对完全是另一个问题。

我编写了一个名为count(X,Y,Z)的方法,该方法将Z绑定到列表Y中X出现的次数上。我正试图解决这个问题,但我不确定该朝哪个方向走,我编写了一个名为count(X,Y,Z)的方法,它将Z绑定到列表Y中X出现的次数。我正试图解决这个问题,但我不确定该朝哪个方向走!我有一种强烈的愿望,就是把sort/2放在最后,即使这不能改进程序。@false我想了想。我在写了自由文本之后才写代码,所以顺序就这样了。对于SortedLen的长度,还需要使用
is
succ
,这感觉有点奇怪。将sort/2放在最后的最大缺点是,对于部分列表,不再存在干净的实例化错误。想想
一个重复(L)
一个重复([a | L])
。很好!我有一种强烈的愿望,就是把sort/2放在最后,即使这不能改进程序。@false我想了想。我在写了自由文本之后才写代码,所以顺序就这样了。对于SortedLen的长度,还需要使用
is
succ
,这感觉有点奇怪。将sort/2放在最后的最大缺点是,对于部分列表,不再存在干净的实例化错误。想想
一个重复(L)
一个重复([a | L])
one_duplicate(L) :-
    sort(L, Sorted),
    length(L, Len),
    length(Sorted, SortedLen),
    Len =:= SortedLen + 1.