Я не совсем уверен, что вы хотите сделать с этим утверждением.Но я бы подумал, что следующего будет достаточно (имейте в виду, что это SICStus, а не swi, но на этом низком уровне я думаю, что все то же самое).
predicate(a, b).
predicate(a, c).
?- predicate(a, Then).
Then = b ;
Then = c ;
no
?- predicate(x, Then).
no
Вы могли бы сделать более сложные проверки, чтобы убедиться, чтоa никогда не является несвязанным значением (чтобы не было predicate(If, b)
. истинным), но если вы не делаете огромное приложение, то я уверен, что хорошей документации будет достаточно.