( nonvar(X) ->
Lower =< X,
X =< Upper
- ; between_(Lower, Upper, X)
+ ; compare(Ord, Lower, Upper),
+ between_(Ord, Lower, Upper, X)
).
-between_(Lower, Upper, Lower) :-
- Lower =< Upper.
-between_(Lower1, Upper, X) :-
- Lower1 < Upper,
- Lower2 is Lower1 + 1,
- between_(Lower2, Upper, X).
+between_(<, Lower0, Upper, X) :-
+ ( X = Lower0
+ ; Lower1 is Lower0 + 1,
+ compare(Ord, Lower1, Upper),
+ between_(Ord, Lower1, Upper, X)
+ ).
+between_(=, Upper, Upper, Upper).
enumerate_nats(I, I).
enumerate_nats(I0, N) :-