2016-11-28 1 views
-1

Я хочу проверить, является ли переменная, скажем X, предикатом формы add (). Как проверить, верно ли это? X == add () не работает, и X не добавляет (_). Как я могу достичь такого сравнения?Сравнение переменной и предиката в Prolog

+1

Это было бы легче, если бы вы предоставили некоторый контекст. –

+1

Вы немного угадываете, не просматривая документацию, для чего нужны '==/2' и' is/2'. Есть ли какое-либо ограничение на то, что аргументы 'add' у меня есть? Это неясно в вашем вопросе. Если строго один аргумент, вы можете использовать' X = add (_) '. Если это произвольно, вы можете использовать оператор '= ..', X = .. [add | _] '. Если вам нужен хотя бы один аргумент, тогда 'X = .. [add, _ | _]'. – lurker

+0

В моем контексте в качестве параметра добавляется один список. Вот почему я попробовал 'X == add (_)'. Однако это не работает. Любые альтернативы? –

ответ

1

Общий, общий способ сделать так:

Specific = add(_), ..., subsumes_term(add(_Any), Specific). 

Часто, люди будут оптимизировать это:

Specific = add(_), ..., nonvar(Specific), Specific = add(_). 

Но в общем случае, вам нужно будет subsumes_term/2