2016-11-27 31 views
0

如果我有這樣的:檢查仿函數列表中的

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

我如何檢查什麼是第二個參數,例如v(1,x)(在這種情況下x)?

一旦我有了名單的頭:[Head | Tail],與Head = [v(1,x)],我該如何檢查它?

回答

1

如果你知道所有的元素都是形式v(_,_)的,那麼你可以簡單地使用統一

Head = v(_, x) 

這成功當且僅當Head是這樣的形式,並在所有方向上正常工作。

如果列表中的元素不是那麼均勻,可以用  arg/3

arg(2, Head, x) 

注意,如果Head這隻能是足夠實例,是因爲這個原因單獨已less  優選

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

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

Tha恩,知道了! 5分鐘後,我又有了同樣的想法。 :D – Daesos

+0

我想你的意思是在閱讀本文後5分鐘;-) – mat

+0

不,認真。我只是需要休息一下編程。 :D – Daesos