奇怪输出的原因是因为文本中有换行符。而且多个空格也会导致有趣的结果。
您可以添加一个“清理”程序。很抱歉,在原子/代码表示之间切换的必要性很复杂:
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).