[英]Split list at element
我希望能夠將某個元素的列表一分為二。 例如, split_at(c, [a,b,c,d,e], Left, Right)
應該給我Left = [a,b]
和Right = [c,d,e]
。 此刻,即使我看到在跟蹤中構建了Left
和Right
,我的代碼最后也沒有給我任何東西。 有人可以指出錯誤嗎?
split_at(_, [], [], []).
split_at(Element, [Element|T], _, [Element|T]).
split_at(Element,[H|T], Left, _) :- split_at(Element, T, [H|Left], _).
假設您的意思是第一次出現指定元素時發生分裂(而不是列表中的第三項):
split_left_right_list(Split,[],[Split|Rest],[Split|Rest]).
split_left_right_list(S,LR,R,[First|Rest]):-
dif(First,S),
split_left_right_list_ac(S,L,R,Rest,[First]),
reverse(L,LR).
split_left_right_list_ac(_,AC,[],[],AC).
split_left_right_list_ac(S,AC,[S|Rest],[S|Rest],AC).
split_left_right_list_ac(S,L,R,[Not|Rest],AC):-
dif(Not,S),
split_left_right_list_ac(S,L,R,Rest,[Not|AC]).
split_at(Elem,List,Left,Right) :-
append(Left,[Elem|Rest],List), Right = [Elem|Rest].
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.