检查列表中的仿函数

时间:2016-11-27 10:52:54

标签: list prolog functor

如果我有这个:

?:check_dv([v(1,x),v(2,y)], X).

如何检查第二个参数是什么,例如v(1,x)(在本例中为x)?

一旦我有了列表的头部:[Head | Tail]Head = [v(1,x)],我该如何查看?

1 个答案:

答案 0 :(得分:1)

如果您知道所有元素都是v(_,_)格式,那么您只需使用统一

Head = v(_, x)

此成功的 iff Head成功,并且可以在所有方向上正常运行。

如果列表中的元素不是那么同质,您可以使用 arg/3

arg(2, Head, x)

请注意,这只适用于Head足够实例化的情况,并且由于这个原因已经不太优选

?- arg(2, v(a,x), x).
true.

?- arg(2, Head, x).
ERROR: arg/3: Arguments are not sufficiently instantiated