在Prolog中将变量绑定到常量

时间:2017-04-04 20:01:51

标签: 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(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).

1 个答案:

答案 0 :(得分:3)

?- 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.