拆分原子并保存分离器

时间:2016-03-06 09:36:12

标签: list split prolog

假设我有一个包含一些keyN-separator的原子,我如何生成一个包含单独元素列表的列表

1000< = N< = 5000~键/元素

示例:

  ?- Atom ='elem1key1elem2key2elem3key1...elemN,keyN',
     split_atom_list(Atom,[key1,key2,keyN],Res_List).

Res_List = [elem1,key1,elem2,key2,...elemN,keyN];
yes

1 个答案:

答案 0 :(得分:1)

在评论中提到的the answer上构建,使用内置谓词(我认为)在SICStus中可用:

split_atom_list(Atom, Keys, [Res, Key|Res_List]) :-
    aggregate(min(P,(Q,K)), S^(
        member(K, Keys),
        sub_atom(Atom, P,Q,S, K)), min(X,(N,Key))),
    sub_atom(Atom, 0,X,_, Res),
    Z is X+N,
    sub_atom(Atom, Z,_,0, Rest),
    !, split_atom_list(Rest, Keys, Res_List).
split_atom_list(_Atom, _Keys, []).

聚合查找第一个(最左侧)匹配键。您可以更改基本案例以接受任何未解析的尾部:

split_atom_list(Atom, _Keys, [Atom]).