Гыхм... Проблема решилась изменением второго и четвертого правил:
Код:
fact(N, _) if free(N), write("error: argument not found"), nl, !.
fact(N, _) if bound(N), N < 0, write("error: illegal argument"), nl, !.
fact(0, 1) if !.
fact(N, F) if bound(N), N1 = N - 1, fact(N1, F1), F = N * F1.
Но вопрос остается в силе: почему не работал предыдущий код? И кстати, код
Код:
x(X) if free(X), write("no arg!"), nl, !.
x(X) if write("arg = ", X), nl.
тоже отказывается работать