gpt4 book ai didi

list - 基于列表中的现有原子生成新原子

转载 作者:行者123 更新时间:2023-12-01 08:07:11 25 4
gpt4 key购买 nike

我想知道如何根据另一个列表中的现有原子在列表中生成新原子。给定列表:

L=[a,b,c,d]

我想生成一个新列表,例如:

P=[a_,b_,c_,d_]

换句话说,类似于字符串加法,例如

String str1 = str2 + "_";

最佳答案

ISO 内置的 atom_concat/3 是在这里使用的:

?- atom_concat(a,'_',A).   A = a_.

但是现在如何映射整个列表元素? maplist/3 就是为了这个目的,

?- maplist(atom_concat('_'), [a,b,c,d], Xs). % Wrong!   Xs = ['_a','_b','_c','_d'].

... 或差不多。我们在前面加了下划线! maplist/3 与许多其他高阶谓词一样,在末尾 添加了额外的参数。在函数式编程语言中,这称为部分应用程序。但在我们的例子中,最好在前面添加一个参数,在末尾添加一个参数。你可以自己定义,比如

suffix_prefix_concat(S,P,C) :-   atom_concat(P,S,C).

虽然这很好用,

?- maplist(suffix_prefix_concat('_'),[a,b,c,d], Xs).   Xs = [a_,b_,c_,d_].

...它有它自己的缺点:发明一个新的定义通常很麻烦:想想看,你必须想出一个新的名字供一次使用!一般的解决方案是 library(lambda)它预装在 YAP 中,您也可以为 SWI 下载它。查看链接 for a generic ISO definition它适用于任何符合 ISO 标准的系统,如 GNU、B、SICStus。

?- maplist(\P^C^atom_concat(P,'_',C),[a,b,c,d],Xs).   Xs = [a_,b_,c_,d_].

而且由于可以避免最后一个参数,类似于上面的suffix_prefix_concat,我们可以写得更紧凑:

?- maplist(\P^atom_concat(P,'_'),[a,b,c,d],Xs).   Xs = [a_,b_,c_,d_].

关于list - 基于列表中的现有原子生成新原子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11156556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com