0
如果我有這樣的:檢查仿函數列表中的
?:check_dv([v(1,x),v(2,y)], X).
我如何檢查什麼是第二個參數,例如v(1,x)
(在這種情況下x
)?
一旦我有了名單的頭:[Head | Tail]
,與Head = [v(1,x)]
,我該如何檢查它?
如果我有這樣的:檢查仿函數列表中的
?:check_dv([v(1,x),v(2,y)], X).
我如何檢查什麼是第二個參數,例如v(1,x)
(在這種情況下x
)?
一旦我有了名單的頭:[Head | Tail]
,與Head = [v(1,x)]
,我該如何檢查它?
如果你知道所有的元素都是形式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
Tha恩,知道了! 5分鐘後,我又有了同樣的想法。 :D – Daesos
我想你的意思是在閱讀本文後5分鐘;-) – mat
不,認真。我只是需要休息一下編程。 :D – Daesos