2

例如,我有这个原子:

"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)

4

1 回答 1

2

奇怪输出的原因是因为文本中有换行符。而且多个空格也会导致有趣的结果。

您可以添加一个“清理”程序。很抱歉,在原子/代码表示之间切换的必要性很复杂:

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).
于 2013-07-01T13:24:59.453 回答