Это кажется мне запутанным. Попробуйте что-то вроде
max(A,B,A) :- A > B .
max(A,B,B) :- A =< B .
Хотя, возможно, вы захотите добавить проверку типа.
[отредактировано, чтобы убрать необходимость вырезания и обеспечить лучшую поддержку для предварительно созданного третьего параметра.]
Другой вариант, конечно, может выглядеть примерно так:
max(A,B,M) :- A > B -> M=A ; M=B .
Это выдаст ошибку, если A или B не связаны, тогда как первый пример будет работать независимо от того, как он вызывается (до тех пор, пока создается 2 аргумента). Например, вызывая его как
max(A,3,5).
выход X=5
.