Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 基于列表中的现有原子生成新原子_List_Prolog_Iso Prolog - Fatal编程技术网

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

List 基于列表中的现有原子生成新原子,list,prolog,iso-prolog,List,Prolog,Iso Prolog,我想知道如何基于另一个列表中的现有原子在列表中生成新原子。给定列表: L=[a,b,c,d] 我想制作一个新的列表,例如: P=[a_,b_,c_,d_] 换句话说,类似于字符串加法的东西,例如 String str1 = str2 + "_"; 不知道它是否在所有的Prolog系统中都可用,但是concat_atom/2可以做到这一点: ?- concat_atom([a,'_'], A). A = a_. ISO内置的atom_concat/3是这里要使用的: ?- atom_con

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

L=[a,b,c,d]
我想制作一个新的列表,例如:

P=[a_,b_,c_,d_]
换句话说,类似于字符串加法的东西,例如

String str1 = str2 + "_";

不知道它是否在所有的Prolog系统中都可用,但是
concat_atom/2
可以做到这一点:

?- concat_atom([a,'_'], A).
A = a_.

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

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

suffix_prefix_concat(S,P,C) :- atom_concat(P,S,C). 由于可以避免最后一个参数,与上面的
suffix\u prefix\u concat
类似,我们可以更简洁地编写:

?- maplist(\P^atom_concat(P,'_'),[a,b,c,d],Xs). Xs = [a_,b_,c_,d_]. ?-映射列表(\P^atom_concat(P,'''u'),[a,b,c,d],Xs)。 Xs=[a,b,c,d]。
在SWI Prolog中,使用
atomic_list_concat
concat_atom
不推荐使用)。 ?- maplist(suffix_prefix_concat('_'),[a,b,c,d], Xs). Xs = [a_,b_,c_,d_]. ?- maplist(\P^C^atom_concat(P,'_',C),[a,b,c,d],Xs). Xs = [a_,b_,c_,d_]. ?- maplist(\P^atom_concat(P,'_'),[a,b,c,d],Xs). Xs = [a_,b_,c_,d_].