如果我有这个:
?:check_dv([v(1,x),v(2,y)], X).
如何检查第二个参数是什么,例如v(1,x)
(在本例中为x
)?
一旦我有了列表的头部:[Head | Tail]
,Head = [v(1,x)]
,我该如何查看?
答案 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