:- module main. main :- unix:argc(C), unix:argv(L), main(C, L). main(0, []) :- Count = 1, main(1, [Count]). main(1, [Count]) :- Range = 100, main(2, [Count, Range]). main(2, L) :- str_int(L, [Count, Range]), generic:new(random_numbers, Rs, Range), loop(Count, Rs). main(C, L) :- C >= 3 | str_int(L, [Count, Range, Seed | L1]), generic:new(random_numbers, Rs, Range, Seed), loop(Count, Rs), C1 := C - 3, main(C1, L1). loop(N, Rs) :- N=:=0 | Rs = []. loop(N, Rs) :- N > 0 | Rs = [R | Rs1], N1 := N - 1, loop(N1, Rs1, R). loop(N, Rs, R) :- wait(R) | builtin:print(R), loop(N, Rs). str_int(L, Zs) :- L = [] | Zs = []. str_int(L, Zs) :- L = [S | L1] | Zs = [Z | Zs1], str_int(S, Z), str_int(L1, Zs1). str_int(S, Z) :- integer(S) | Z = S. str_int(S, Z) :- string(S, Len, 8), Len > 0 | str_int(S, 0, Len, 0, Z). str_int(S, K, Len, N, Z) :- K=:=Len | Z = N. str_int(S, K, Len, N, Z) :- K < Len | string_element(S, K, C), N1 := N * 10 + C - #"0", K1 := K + 1, str_int(S, K1, Len, N1, Z).