2013-04-26 53 views
0

我需要实现此功能。在条款中统一2个随机变量

unify2(func1(X,Y,Z), R) => R = func1(X,X,Z) 
          R = func1(X,Y,X) 
          R = func1(X,Y,Y) 

func1没有必要有3个参数,数字可以是任意的。你可以看到,在结果中总是有几个变量统一起来,其余部分是相同的。

我会感激一些想法,我一直在研究copy_term,但还没有能够破解坚果呢。

回答

1

(= ..)/ 2(拼写univ)它是用来分解/组装结构:尽量

unify2(T, R) :- 
    T =.. [F,X,Y,Z], 
    (R =.. [F,X,X,Z] ; R =.. [F,X,Y,Z] ; R =.. [F,X,Y,Y]). 

这适用于任意的结构与3个参数。

+0

我想这需要一段时间,直到我实现它(并接受),但我觉得这个答案很有帮助。谢谢 – 2013-04-26 21:32:04