?- use_module(library(random)). % generate list of Lotto 649 numbers... % Need to set random seed if you want new numbers! % Use setrand/1. lotto649(Numbers) :- make_intlist(1, 49, All), select_random(6, All, Numbers2), sort(Numbers2, Numbers). % generate infinite list of numbers... lotto_loop :- repeat, lotto649(L), write(L), nl, fail. % select_random(N, All, Nums) selects N random integers from list All, % putting them in Nums select_random(N, _, []) :- N =< 0. select_random(N, All, [Number|Rest]) :- N > 0, length(All, Size), % built in Sicstus generate_random_int(1, Size, R), remove_nth(R, All, Number, Leftover), M is N - 1, select_random(M, Leftover, Rest). % generate a random integer Random between Low and High inclusive generate_random_int(Low, High, Random) :- Range is High-Low+1, random(X), Random is integer(X * Range) + Low. % convert to range % remove_nth(N, List, Item, Rest) removes the N-th item Item from % List, resulting in Rest. Will fail if the list is < N in size. remove_nth(1, [Item|Rest], Item, Rest). remove_nth(N, [X|All], Item, [X|Rest]) :- M is N - 1, remove_nth(M, All, Item, Rest). % make a list of integers between N and M inclusive make_intlist(N, M, []) :- N > M. make_intlist(N, M, [N|L]) :- N =< M, N2 is N + 1, make_intlist(N2, M, L).