gpt4 book ai didi

prolog - 防止列表中变量的统一

转载 作者:行者123 更新时间:2023-12-04 20:30:02 25 4
gpt4 key购买 nike

我正在尝试编写一个谓词,如果变量 X 返回 1和一个谓词 f(X)都是输入列表 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.

我写了这个简单的代码:
f_in_list(L, 1) :-
member(X, L),
member(f(X), L),
!.
f_in_list(_, 0).

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

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

最佳答案

正如@lurker 所提到的,您应该考虑使用 ==/2因为只有当这两个术语已经相同而无需进一步统一时,它才会成功。

她是我的实现:

f_in_list(L, 1) :-
member(X, L),
member(f(Y), L),
X == Y ,!.

f_in_list(_, 0).

例子:
?- f_in_list([X, f(X)], Val).
Val = 1.

?- f_in_list([X, f(Y), Z], Val).
Val = 0.

关于prolog - 防止列表中变量的统一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48371764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com