拆分元素列表

时间:2018-04-22 21:58:56

标签: list prolog

我希望能够在某个元素中将列表拆分为两个。例如,{ "took": 22, "timed_out": false, "_shards": { "total": 6, "successful": 6, "skipped": 0, "failed": 0 }, "aggregations": { "significant_tags": { "doc_count": 2945, "bg_count": 2945, "buckets": [] } } } 应该为我split_at(c, [a,b,c,d,e], Left, Right)Left = [a,b]。目前,即使我在跟踪中看到Right = [c,d,e]Left,我的代码也没有给我任何结果。有人可以指出错误吗?

Right

2 个答案:

答案 0 :(得分:1)

假设您指的是第一次出现指定元素时的拆分(而不是列表中的第3个项目):

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

答案 1 :(得分:1)

split_at(Elem,List,Left,Right) :-
  append(Left,[Elem|Rest],List), Right = [Elem|Rest].