假设我有一个包含一些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
答案 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]).