【问题标题】:Concat a List of Strings with additional Strings in between连接一个字符串列表,中间有其他字符串
【发布时间】:2021-06-14 11:11:07
【问题描述】:

这就是我要搜索的内容。我想连接一个给定的列表,例如:

list = [a,b,c,d]

我想连接那些字符串。在连接之间,我想始终使用相同的字符串,以便结果如下所示:

"Hey a, Hey b, Hey c, Hey d"

这在 swi-Prolog 中可行吗?

【问题讨论】:

    标签: prolog swi-prolog


    【解决方案1】:

    您不仅希望在“中间有额外的字符串”,因为您还希望在每个字符串的“前面”有一些东西。 更具体地说,您希望在每个字符串前面加上“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'.
    

    【讨论】:

      【解决方案2】:

      您正在寻找隐藏在atomic_list_concat/3 谓词后面的“intersperse”或“join”函数:

      atomic_list_concat/3

      atomic_list_concat(+List, +Separator, -Atom)

      或者创建 SWI-Prolog“字符串”(应该在处理文本的场景中使用):

      atomics_to_string/3

      atomics_to_string(+List, +Separator, -String)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-24
        • 2014-04-19
        • 1970-01-01
        • 2017-01-17
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        相关资源
        最近更新 更多