27 lines
524 B
Perl
27 lines
524 B
Perl
|
|
||
|
|
||
|
:- module( concat, [concat_name/2]).
|
||
|
|
||
|
concat_name( List, Name) :- List=[_|_],
|
||
|
conc_parts( List, Chs, []),
|
||
|
atom_codes( Name, Chs).
|
||
|
concat_name( F/A, Name) :-
|
||
|
conc_part( F/A, Chs, []),
|
||
|
atom_codes( Name, Chs).
|
||
|
|
||
|
conc_parts( []) --> [].
|
||
|
conc_parts( [P]) --> !, conc_part( P).
|
||
|
conc_parts( [P|Ps]) -->
|
||
|
conc_part( P),
|
||
|
"_",
|
||
|
conc_parts( Ps).
|
||
|
|
||
|
conc_part( F/A) --> !, name( F), "/", name( A).
|
||
|
conc_part( X ) --> name( X).
|
||
|
|
||
|
name( A) --> {name(A,Chars)}, copy( Chars).
|
||
|
|
||
|
copy( []) --> [].
|
||
|
copy( [C|Cs]) --> [ C ], copy( Cs).
|
||
|
|