Я видел Prolog Prologue определения between/3
:Может ли между/3 не быть рекурсивным?
between(Lower, Upper, Lower) :-
Lower =< Upper.
between(Lower1, Upper, X) :-
Lower1 < Upper,
Lower2 is Lower1 + 1,
between(Lower2, Upper, X).
Я не понимаю, почему он требует рекурсии. Логическое определение between
может быть:
between(Lower, Upper, Something):-
Lower =< Upper,
Lower =< Something,
Something =< Upper.
Я попробовал на gprolog
и она работает, но только для простых запросов:
| ?- between(0,5,1).
yes
Для запросов с переменными я получаю:
| ?- between(0,5,X).
uncaught exception: error(instantiation_error, (=<)/2)
Я действительно не понимаю, почему.
I вид фигуры Пролог нуждается в каком-то ссылочном номере, чтобы объединить переменные против, но почему критическая ошибка на (=<)/2
?