对于原子
有多种方法可以做到这一点。我发现以下特别简单,使用atomic_list_concat/3 http://www.swi-prolog.org/pldoc/man?predicate=atomic_list_concat/3:
?- atomic_list_concat(Words, ' ', 'How are you today?'), atomic_list_concat(Words, '_', Result).
Words = ['How', are, you, 'today?'],
Result = 'How_are_you_today?'.
对于 SWI 字符串
上述操作也可以使用 SWI 字符串来完成。不幸的是,这儿没有string_list_concat/3
这将使转换变得微不足道。split_string/4 http://www.swi-prolog.org/pldoc/doc_for?object=split_string/4用途很广,但它只完成了一半的工作:
?- split_string("How are you today?", " ", "", Words).
Words = ["How", "are", "you", "today?"].
我们可以定义string_list_concat/3
我们自己(定义这一点的第一次尝试如下所示)或者我们需要一种稍微不同的方法,例如重复string_concat/3 http://www.swi-prolog.org/pldoc/doc_for?object=string_concat/3.
string_list_concat(Strings, Separator, String):-
var(String), !,
maplist(atom_string, [Separator0|Atoms], [Separator|Strings]),
atomic_list_concat(Atoms, Separator0, Atom),
atom_string(Atom, String).
string_list_concat(Strings, Separator, String):-
maplist(atom_string, [Separator0,Atom], [Separator,String]),
atomic_list_concat(Atoms, Separator0, Atom),
maplist(atom_string, Atoms, Strings).
进而:
?- string_list_concat(Words, " ", "How are you today?"), string_list_concat(Words, "_", Result).
Words = ["How", "are", "you", "today?"],
Result = "How_are_you_today?".