List Prolog-返回嵌套列表中唯一编号的列表
大家好,我正在尝试自学Prolog,我一直在尝试创建一个函数,该函数采用嵌套列表并只返回唯一数字的列表。所以unique(L,T)意味着T是从L中提取的唯一数字的列表 列表的格式如下所示,其中c后面总是跟一个int:List Prolog-返回嵌套列表中唯一编号的列表,list,recursion,prolog,List,Recursion,Prolog,大家好,我正在尝试自学Prolog,我一直在尝试创建一个函数,该函数采用嵌套列表并只返回唯一数字的列表。所以unique(L,T)意味着T是从L中提取的唯一数字的列表 列表的格式如下所示,其中c后面总是跟一个int: [a[b[c,5],[c,3],[c,4]] 应返回为true的内容示例: unique([b,[c,4],[c,3]], [4,3]) 这是我尝试过的代码,但是当我尝试查询时,它只是返回一个空列表: unique([],[]). unique([X|XS],[X|L]) :-
[a[b[c,5],[c,3],[c,4]]
应返回为true的内容示例:
unique([b,[c,4],[c,3]], [4,3])
这是我尝试过的代码,但是当我尝试查询时,它只是返回一个空列表:
unique([],[]).
unique([X|XS],[X|L]) :-
integer(X),
unique(XS,L).
unique([X|XS],L) :-
\+integer(X),
unique(XS,L).
我也尝试过各种其他解决方案,似乎总是得到一个空列表作为输出,或者只是“false”。我将感谢任何关于这方面的指导 此代码没有考虑到列表是嵌套的;它应该在以下方面成功(例如):
您需要这样一种情况:列表的开头是一个列表,递归地查找其中的整数,然后将查找到的内容附加到列表尾部的内容中。将列表展平,过滤以获得数字,排序以使其唯一:
?- L = [a,[b,[c,5],[c,3]],[c,4]], flatten(L, F), include(number, F, N), sort(N, Unique_numbers).
L = [a, [b, [c, 5], [c, 3]], [c, 4]],
F = [a, b, c, 5, c, 3, c, 4],
N = [5, 3, 4],
Unique_numbers = [3, 4, 5].
如果你想保持原来的顺序,你不能排序,但是有很多答案可以告诉你怎么做
如果您不想使用库谓词,请查看它们是如何定义的(flant/2
和include/2
),并从中获得自己解决方案的灵感
?- L = [a,[b,[c,5],[c,3]],[c,4]], flatten(L, F), include(number, F, N), sort(N, Unique_numbers).
L = [a, [b, [c, 5], [c, 3]], [c, 4]],
F = [a, b, c, 5, c, 3, c, 4],
N = [5, 3, 4],
Unique_numbers = [3, 4, 5].