小编Tau*_*aut的帖子

防止列表中变量的统一

我正在尝试编写一个谓词,如果变量X和谓词f(X)都是输入列表的元素,则返回1,如果L缺少其中一个,则返回0.

这就是谓词应该做的事情:

?- f_in_list([X, f(X)], Val).
  should return Val = 1

?- f_in_list([X, f(Y), Z], Val).
  should return Val = 0, as X and Y are different variables.
Run Code Online (Sandbox Code Playgroud)

我写了这个简单的代码:

f_in_list(L, 1) :-
    member(X, L),
    member(f(X), L),
    !.
f_in_list(_, 0).
Run Code Online (Sandbox Code Playgroud)

我的问题是Prolog总是试图统一输入变量,所以它分别返回X = f(X)X = f(Y).
我试图用来dif(X, f(X))绕过这个问题,但即使这样也行不通.Val如果列表包含至少两个元素,则始终为1.

有没有办法将变量转换为原子或字符串,所以Prolog无法统一变量?或者更好的是,有没有办法阻止同名变量的统一?

prolog

5
推荐指数
1
解决办法
139
查看次数

标签 统计

prolog ×1