¿Es posible declarar una lista ascendente?

Puedo hacer listas de enteros ascendentes así:

?- findall(L,between(1,5,L),List).

Sé que también puedo generar valores usando:

?- length(_,X).

Pero no creo que pueda usar esto en un findall, como cosas como el siguiente bucle:

?- findall(X,(length(_,X),X<6),Xs).

También puedo generar una lista usando clpfd.

:- use_module(library(clpfd)).

list_to_n(N,List) :-
   length(List,N),
   List ins 1..N,
   all_different(List),
   once(label(List)).

list_to_n2(N,List) :-
   length(List,N),
   List ins 1..N,
   chain(List,#<),
   label(List).

El último método me parece mejor ya que es el más declarativo y no utilizaonce/1 obetween/3 ofindall/3 etc.

¿Hay otras formas de hacer esto? ¿Hay una manera declarativa de hacer esto en Prolog 'puro'? ¿Hay una 'mejor' manera?

Respuestas a la pregunta(1)

Su respuesta a la pregunta