atomic_list_concat / 3中的空格

时间:2013-07-01 11:20:04

标签: prolog

我有这个原子,例如:

"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)中使用两个分隔符?

1 个答案:

答案 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).