奇妙な出力の原因は、テキストに改行があるためです。また、スペースが複数あると、おかしな結果になります。
「クリーンアップ」手順を追加できます。アトム/コード表現を切り替える必要があるため、複雑で申し訳ありません:
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).