2017-04-04 9 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. 
関連する問題