在我的程序的某个时刻,我有一个由以前也是原子形成的原子,我想删除其中的字符空间,以便以后我可以毫无问题地使用:
term_to_atom(Result, 'second2(second2),region(ºMediterranean Sea),months(no_value),third3(third3),recog(ºNew Type),distance(no_value)').
并获得此
Result = (second2(second2), region(ºMediterraneanSea), months(no_value), third3(third3), recog(ºNewType), distance(no_value))
或者原件也可以使用
Result = (second2(second2), region(ºMediterranean Sea), months(no_value), third3(third3), recog(ºNew Type), distance(no_value))
因为如果我不删除那些字符空格,那么term_to_atom
会抱怨它。我该如何解决?
答案 0 :(得分:2)
您可以使用此程序:
strip_spaces(S, NoSpaces) :-
atom_codes(S, Cs), delete(Cs, 0' , X), atom_codes(NoSpaces, X).
但不推荐使用delete / 3。另一种可能性是
strip_spaces(S, NoSpaces) :-
atomic_list_concat(L, ' ', S),
atomic_list_concat(L, NoSpaces).
其中任何一个都会“吃掉”每个空间,但是根据您的问题描述,在您与gusbro交换的评论中,这对我来说似乎不是正确的方法。在DB接口上更改文字可能会在以后遇到麻烦。
可以使用DCG将您的输入解析为列表而不是连词:
:- [library(http/dcg_basics)].
parse_result(X, R) :-
atom_codes(X, Cs),
phrase(parse_list(R), Cs).
parse_list([T|Ts]) -->
parse_term(T), (",", parse_list(Ts) ; {Ts=[]}).
parse_term(T) -->
string(F), "(", string(Arg), ")",
{atom_codes(Fa,F), atom_codes(Arga,Arg), T =.. [Fa,Arga]}.