我有这个原子,例如:
"The pen
is on
the table"
如果我使用atomic_list_concat(L, ' ', S)
,我会获得:
L =[The, pen
, is, on
, the, Table]
而不是:
L =[The, pen, is, on, the, Table]
为什么呢?我怎样才能获得第二个解决方案?
编辑:是否可以在atomic_list_concat(L, Separator, S)
中使用两个分隔符?
答案 0 :(得分:3)
奇怪输出的原因是因为文本中有换行符。而且多个空格也会产生有趣的结果。
您可以添加'清理'程序。对不起,因为必须在原子/代码表示之间切换,这很复杂:
cleanup(Dirty, Clean) :- maplist(only_graphs, Dirty, Clean).
only_graphs(Word, Clean) :-
atom_codes(Word, X),
include(keep_graph, X, Y),
atom_codes(Clean, Y).
keep_graph(C) :- code_type(C, graph).
编辑:根据您的SW组织,您可以重新定义 atomic_list_concat / 3,但这会使代码库变脆。
我建议使用描述性的东西,比如
separe_words(Atom, Words) :-
atomic_list_concat(Dirty, ' ', Atom),
maplist(only_graphs, Dirty, Words).
并添加到〜/ .plrc或您的库
你发现编辑,有normalize_space / 2,这样可以做得更好。 用法应该是
separe_words(Atom, Words) :-
normalize_space(atom(Clean), Atom),
atomic_list_concat(Words, ' ', Clean).