¿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?