prolog中的输出语句
我试着将像prolog中的输出语句,prolog,Prolog,我试着将像[1,2,3,3,4,5,5,6,6,7]这样的数字列表按递增顺序排序为另外两个列表Unique和NotUnique,这只是为了确定一个数字在列表中出现的次数是否超过一次1将进入唯一列表,3,3将进入非唯一列表 我根据建议进行了更改,但我在排序列表的末尾保留了\u G1678和\u G1708,这些是什么 ?- removeUni([1,2,3,3,4,5,5,5,6],A,B). A = [1, 2, 4|_G1678], B = [3, 3, 5, 5, 5, 6, 6|_G17
[1,2,3,3,4,5,5,6,6,7]
这样的数字列表按递增顺序排序为另外两个列表Unique
和NotUnique
,这只是为了确定一个数字在列表中出现的次数是否超过一次<代码>1将进入唯一
列表,3,3
将进入非唯一
列表
我根据建议进行了更改,但我在排序列表的末尾保留了\u G1678
和\u G1708
,这些是什么
?- removeUni([1,2,3,3,4,5,5,5,6],A,B).
A = [1, 2, 4|_G1678],
B = [3, 3, 5, 5, 5, 6, 6|_G1708].
这是我的removeUni
代码:
removeUni([],[],[]).
removeUni([X],[X],[]).
removeUni([X1,X2],[X1,X2|Uni],D):-
X1 < X2,
!.
removeUni([X1,X2],Uni,[X1,X2|D]):-
X1 =:= X2,
!.
removeUni([X],[X|Uni],D).
removeUni([X1,X2,X3|Q],[X1,X2|Uni],D):-
X1 < X2,
X2 < X3,
removeUni([X3|Q],Uni,D),
!.
removeUni([X1,X2,X3|Q],[X1|Uni],D):-
X1 < X2,
X2 == X3,
removeUni([X2,X3|Q],Uni,D),
!.
removeUni([X1,X2,X3|Q],Uni,[X1|D]):-
X1 == X2,
X2 == X3,
removeUni([X2,X3|Q],Uni,D),
!.
removeUni([X1,X2,X3|Q],Uni,[X1,X2|D]):-
X1 == X2,
X2 < X3,
removeUni([X3|Q],Uni,D),
!.
removeUni([],[],[])。
removeUni([X],[X],])。
移除Uni([X1,X2],[X1,X2 | Uni],D):-
X1
删除uni([X],[X],[X])。
不正确。如果有一个元素的列表,[X]
,则X
是唯一的。所以这应该是removeUni([X],[X],])。
。而且你根本不应该让删除Uni([],Uni,D)。
。它说,如果您有一个空列表,那么唯一和非唯一元素的列表就是您喜欢的任何列表。您还说您正在尝试对数字列表进行排序,但您的谓词似乎假定这些数字已经排序。你能澄清一下吗?次要的观察:带有=:=
的子句应该有一个,
来代替
当你得到带有\u xxx
变量的结果时,这意味着它们是不稳定的。你的第一个子句removeUni([X1,X2],[X1,X2 | Uni],D)
没有实例化D
。您可能会收到“singleton variable”警告。您需要注意这些警告并解决它们。