从列表中分离列表 Prolog
Separate list from a list Prolog
我有这个:
Lines=[['4'],['1','2','3','4'],['5','6','7','8'],['9', '10']]
我想要:
a=['4']
b=[['1','2','3','4']['5','6','7','8']]
为此,我必须在具有 length=a=['4'] 的 Lines 中搜索元素。
有人可以帮我吗?
可以用“一行”来做:
Lines=[[4],[1,2,3,4],[5,6,7,8],[9, 10]] ,
selectchk([Len], Lines, Lines0) ,
length(LineOfLen, Len) ,
findall(LineOfLen, member(LineOfLen, Lines0), LinesOfLen) .
swi-prolog 中的结果(忽略不太重要的变量):
Len = 4,
LinesOfLen = [[1,2,3,4],[5,6,7,8]].
这是一个简单的单行代码:
select_sublists( [[L]|Xs] , Ys ) :-
findall( X , (member(X,Xs), length(X,L)) , Ys ).
在select_sublists/2
的头部,我们确保传入列表的头部(第一个参数)是包含所需长度的单个元素列表。我们提取该长度,并将尾部用作要搜索的列表列表。
正文中findall/3
的调用说:
- 找到所有
X
,使得
X
是 Xs
的成员,并且
X
的长度是L
,
- 返回
Ys
中的结果列表。
运行
Lines = [ [4] , [1,2,3,4] , [5,6,7,8] , [9, 10] ] ,
select_sublists( Lines, Filtered).
给你预期的
Filtered = [ [1,2,3,4] , [5,6,7,8] ]
我有这个:
Lines=[['4'],['1','2','3','4'],['5','6','7','8'],['9', '10']]
我想要:
a=['4']
b=[['1','2','3','4']['5','6','7','8']]
为此,我必须在具有 length=a=['4'] 的 Lines 中搜索元素。
有人可以帮我吗?
可以用“一行”来做:
Lines=[[4],[1,2,3,4],[5,6,7,8],[9, 10]] ,
selectchk([Len], Lines, Lines0) ,
length(LineOfLen, Len) ,
findall(LineOfLen, member(LineOfLen, Lines0), LinesOfLen) .
swi-prolog 中的结果(忽略不太重要的变量):
Len = 4,
LinesOfLen = [[1,2,3,4],[5,6,7,8]].
这是一个简单的单行代码:
select_sublists( [[L]|Xs] , Ys ) :-
findall( X , (member(X,Xs), length(X,L)) , Ys ).
在select_sublists/2
的头部,我们确保传入列表的头部(第一个参数)是包含所需长度的单个元素列表。我们提取该长度,并将尾部用作要搜索的列表列表。
正文中findall/3
的调用说:
- 找到所有
X
,使得 X
是Xs
的成员,并且X
的长度是L
,- 返回
Ys
中的结果列表。
运行
Lines = [ [4] , [1,2,3,4] , [5,6,7,8] , [9, 10] ] ,
select_sublists( Lines, Filtered).
给你预期的
Filtered = [ [1,2,3,4] , [5,6,7,8] ]