Я хотел бы использовать такие предикаты, как:
range(X,0,5)
range(X,4,200)
range(X,-1000000,1000000)
dom_range(X,-1000000,1000000)
со смыслом:
range(X,0,5) :- member(X,[0,1,2,3,4,5]).
range(X,4,200) :- member(X,[4,5,6...198,199,200]).
range(X,-1000000,1000000) :- member(X,[-1000000,...,1000000]).
dom_range(X,-1000000,1000000) :- domain(X, [-1000000,...,1000000]).
Как красиво закодировать это на Прологе (принимая во внимание производительность решения - глубину рекурсии и т. д.)?
Ожидается, что решение будет работать на GNU-Prolog.
P.S. Вопрос, вдохновленный этим вопросом.