1:- module(tidylog_atom_name, [name//1]). 2
4
5:- use_module(library(tidylog/common), [ when_generating//1
6 , when_parsing//1
7 ]). 8
9name(A) -->
10 when_generating(atom_codes(A,[Code|Codes])),
11
12 initial(Code),
13 inner(Codes),
14
15 when_parsing(atom_codes(A,[Code|Codes])).
16
17
18initial(C) -->
19 [C],
20 { initial_char(C) }.
21
22inner([C|Codes]) -->
23 [C],
24 { inner_char(C) },
25 inner(Codes).
26inner([]) -->
27 [].
28
29
30initial_char(C) :-
31 between(0'a, 0'z, C).
32
33inner_char(C) :-
34 C = 0'_;
35 initial_char(C);
36 between(0'0,0'9,C);
37 between(0'A,0'Z,C)