generate(list(Options),Value) :-
is_list(Options) ,
generate(ground_type(Options),Type) ,
generate(list(Type,Options),Value).
generate(list(Type),Value) :-
generate(list(Type,[]),Value).
generate(list(_,Options),[]) :-
member(size:0,Options),
!.
generate(list(Type,Options),Value) :-
( member(nonEmpty,Options)
-> LowerBound = 1
; LowerBound = 0) ,
( member(setBound:Bound,Options)
-> random(LowerBound,Bound,RSize)
; ( member(setSize:Size,Options)
-> RSize = Size
; random(LowerBound,50,RSize)
)
) ,
length(Value,RSize) ,
maplist(generate(Type),Value).