range в  swi prolog

Помогите пожалуйста реализовать функцию похожую на range, которая принимала бы натуральное число N и возвращало бы список [1, 2, ..., N].

У меня получилось реализовать в обратном порядке:

PrologВыделить код

1
2
3
4

range( 0, []):- !.
range( N, [N | Rest]):-
    N1 is -( N, 1),
    range( N1, Rest).

А потом вызвать функцию reverse

PrologВыделить код

| | |
| --- | --- |
| 1 | app( N, L):- range( N, L1), reverse( L1, L). |

Подскажите пожалуйста правильный способ, спасибо.