用变量替换原子

时间:2019-02-23 09:57:49

标签: prolog

假设我想要一个谓词,将谓词x替换为变量X,因此 像这样的东西:

replace(p(x,Y), Result)
...
Result = p(X,Y).

解决此问题的最佳方法是什么? 在规则主体中使用X会产生单例错误。

为了澄清我对X的值不感兴趣,我要寻找的是X的名称。

编辑

我发现这段代码基本上可以满足我的需求

replace(Term,Term,With,With) :-
    !.
replace(Term,Find,Replacement,Result) :-
    Term =.. [Functor|Args],
    replace_args(Args,Find,Replacement,ReplacedArgs),
    Result =.. [Functor|ReplacedArgs].

replace_args([],_,_,[]).
replace_args([Arg|Rest],Find,Replacement,[ReplacedArg|ReplacedRest]) :-
    replace(Arg,Find,Replacement,ReplacedArg),
    replace_args(Rest,Find,Replacement,ReplacedRest).

当我从外壳调用它时,它具有所需的行为

?- replace(x,x,X,Result).
X = Result.

但是当我从程序内部调用它时,我又回到了第一个问题

...code...
replace(x,x,X,Result)

X是单例变量,结果是

true.

0 个答案:

没有答案