Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Prolog-返回嵌套列表中唯一编号的列表_List_Recursion_Prolog - Fatal编程技术网

List Prolog-返回嵌套列表中唯一编号的列表

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]) :-

大家好,我正在尝试自学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]) :-
 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].