【发布时间】:2021-06-14 11:11:07
【问题描述】:
这就是我要搜索的内容。我想连接一个给定的列表,例如:
list = [a,b,c,d]
我想连接那些字符串。在连接之间,我想始终使用相同的字符串,以便结果如下所示:
"Hey a, Hey b, Hey c, Hey d"
这在 swi-Prolog 中可行吗?
【问题讨论】:
标签: prolog swi-prolog
这就是我要搜索的内容。我想连接一个给定的列表,例如:
list = [a,b,c,d]
我想连接那些字符串。在连接之间,我想始终使用相同的字符串,以便结果如下所示:
"Hey a, Hey b, Hey c, Hey d"
这在 swi-Prolog 中可行吗?
【问题讨论】:
标签: prolog swi-prolog
您不仅希望在“中间有额外的字符串”,因为您还希望在每个字符串的“前面”有一些东西。 更具体地说,您希望在每个字符串前面加上“Hey”,在每个字符串之间加上“,”。
我会使用maplist/3 在您的每个条目前面使用atom_concat/3 连接字符串“Hey”。
然后可以使用atomic_list_concat/3 将所有“Hey X”条目连接到单个字符串。
该谓词还需要一个分隔符,该分隔符应放在所有条目之间,即“,”在您的情况下。
List = [a,b,c,d],
maplist(atom_concat("Hey "), List, HeyList),
atomic_list_concat(HeyList, ", ", FinalString).
结果:
List = [a, b, c, d],
HeyList = ['Hey a', 'Hey b', 'Hey c', 'Hey d'],
FinalString = 'Hey a, Hey b, Hey c, Hey d'.
【讨论】:
您正在寻找隐藏在atomic_list_concat/3 谓词后面的“intersperse”或“join”函数:
atomic_list_concat(+List, +Separator, -Atom)
或者创建 SWI-Prolog“字符串”(应该在处理文本的场景中使用):
atomics_to_string(+List, +Separator, -String)
【讨论】: