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
在Prolog中将变量绑定到常量_Prolog - Fatal编程技术网

在Prolog中将变量绑定到常量

在Prolog中将变量绑定到常量,prolog,Prolog,我想写一个程序,获取一个列表和一组常量,并将列表中的变量绑定到这些常量。我只想将一个常量绑定到一个特定变量。例如: x:- C1=[p,r,o,X,r,a,Y,Y,Z,n,X], bind_vars(C1,[g,m,i],[],Map). 在这里,我希望C1成为[p,r,o,g,r,a,m,m,I,n,g]。 我有下面的实现。能否提高效率 bind_vars([], _, Map,Map). bind_vars([V|Vs],Consts,Map1,Map2):- var(

我想写一个程序,获取一个列表和一组常量,并将列表中的变量绑定到这些常量。我只想将一个常量绑定到一个特定变量。例如:

x:-
    C1=[p,r,o,X,r,a,Y,Y,Z,n,X],
    bind_vars(C1,[g,m,i],[],Map).
在这里,我希望
C1
成为
[p,r,o,g,r,a,m,m,I,n,g]。

我有下面的实现。能否提高效率

bind_vars([], _, Map,Map).
bind_vars([V|Vs],Consts,Map1,Map2):-
  var(V),!,
  member(C,Consts),
  \+memberchk(_-C,Map1),!,
  V=C,
  bind_vars(Vs,Consts,[V-C|Map1],Map2).
bind_vars([_|Vs],Consts,Map1,Map2):-
  bind_vars(Vs,Consts,Map1,Map2).
?- C1=[p,r,o,X,r,a,Y,Y,Z,n,X],
   term_variables(C1, [g,m,i]).
C1 = [p, r, o, g, r, a, m, m, i, n, g],
X = g,
Y = m,
Z = i.