2017-04-04 48 views
0

我想編寫一個程序,該程序需要一個列表和一組常量,並將列表中的變量綁定到常量。我只想要一個常量被綁定到一個特定的變量。例如:將變量綁定到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). 

回答

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.