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).