1 :- multifile generate/2.
2 :- multifile shrink/3.
3
4 :- use_module(library(random),[random/3]).
5
6 % Options:
7 % size:Length, alph only a-z
8
9 generate(atom(Options),Value) :-
10 % given or random size
11 (member(size:Size,Options)
12 -> Size >= 0
13 ; random(1,20,Size)) ,
14 % only alphabetic with no capital letters, else random chars with special signs
15 (member(alph,Options)
16 -> generate(list(between(97,122),[size:Size]),Codes)
17 ; generate(list(between(33,127),[size:Size]),Codes)) ,
18 atom_codes(Value,Codes).
19
20 shrink(atom(_),Value,Shrunken) :-
21 atom_codes(Value,CodeList) ,
22 shrink(list,CodeList,ShrunkenList) ,
23 ShrunkenList \= [] ,
24 atom_codes(Shrunken,ShrunkenList).