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).
							 | 
						||
| 
								 | 
							
								
							 |