2016-11-27 6 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 достаточно инстанцирован, и только по этой причине уже менее предпочтительным  :

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

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

Тха nks, понял! Та же идея пришла ко мне через 5 минут. : D – Daesos

+0

Я полагаю, вы имеете в виду через 5 минут после прочтения этого ;-) – mat

+0

Нет, серьезно. Я просто нуждался в перерыве от программирования. : D – Daesos

 Смежные вопросы

  • Нет связанных вопросов^_^