将列表过滤到单独的列表中 [英] filter list into separate lists
本文介绍了将列表过滤到单独的列表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要过滤列表[#,d,e,#,f,g]
,这样我得到的输出为[[d,e],[f,g]]
,
每当遇到#"时,我都会在创建新列表时遇到麻烦,有没有办法做到这一点?
我尝试了下面的代码,
I need to filter the list [#,d,e,#,f,g]
such that I get the output as [[d,e],[f,g]]
,
I am stuck while creating a new list every time I encounter '#' is there a way to do this?
I tried the code below,
filterL([],List) :-[].
filterL([Head|Tail],X) :-
( Head \='#'->
append(X,Head,List),
filterL(Tail,List)
; filterL(Tail,X)
).
推荐答案
您的问题没有很好地定义.是否允许使用空序列? [#]
是否应与[[],[]]
(前后有空序列)或[]
相关?您说应该是[]
.所以:
Your problem is not very well defined. Are empty sequences allowed or not? Shall [#]
be related to [[],[]]
(there is an empty sequence before and after) or []
? You say it should be []
. So:
list_splitbyhash(Xs, Xss) :-
phrase(splitby(Xss,#), Xs).
splitby([],_E) -->
[].
splitby(Xss,E) -->
[E],
splitby(Xss,E).
splitby([Xs|Xss],E) -->
{Xs = [_|_]},
all_seq(dif(E),Xs),
splitby(Xss,E).
all_seq(_, []) --> [].
all_seq(C_1, [C|Cs]) -->
[C],
{call(C_1,C)},
all_seq(C_1, Cs).
这篇关于将列表过滤到单独的列表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文