48 lines
		
	
	
		
			712 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
		
			712 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								% Preliminary support for FASTA format.
							 | 
						||
| 
								 | 
							
								% Just convert sequence into string of atoms.
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								% support for a single sequence.
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- module(fasta, [fa2atoms/2,fa2atoms/3]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fa2atoms(F, L) :-
							 | 
						||
| 
								 | 
							
									fa2atoms(F, L, []).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fa2atoms(F,L,L0) :-
							 | 
						||
| 
								 | 
							
									open(F,read,S),
							 | 
						||
| 
								 | 
							
									get0(S,C0),
							 | 
						||
| 
								 | 
							
									skip_header(C0,S),
							 | 
						||
| 
								 | 
							
									get0(S,C),
							 | 
						||
| 
								 | 
							
									read_chars(C, S, L, L0),
							 | 
						||
| 
								 | 
							
									close(S).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								read_chars(-1,_) --> [].
							 | 
						||
| 
								 | 
							
								read_chars(10,S) --> !,
							 | 
						||
| 
								 | 
							
									{ get0(S,MC) },
							 | 
						||
| 
								 | 
							
									read_chars(MC,S).
							 | 
						||
| 
								 | 
							
								read_chars(C,S) -->
							 | 
						||
| 
								 | 
							
									[AC],
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
									 cvt_c(C,AC),
							 | 
						||
| 
								 | 
							
									 get0(S,MC)
							 | 
						||
| 
								 | 
							
									},
							 | 
						||
| 
								 | 
							
									read_chars(MC, S).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								cvt_c(C,A) :-
							 | 
						||
| 
								 | 
							
									C >= 0'A, C =< 0'Z, !,
							 | 
						||
| 
								 | 
							
									AC is C-(0'A-0'a),
							 | 
						||
| 
								 | 
							
									atom_codes(A,[AC]).
							 | 
						||
| 
								 | 
							
								cvt_c(C,A) :-
							 | 
						||
| 
								 | 
							
									C >= 0'a, C =< 0'z,
							 | 
						||
| 
								 | 
							
									atom_codes(A,[C]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								skip_header(10,_) :- !.
							 | 
						||
| 
								 | 
							
								skip_header(_,S) :-
							 | 
						||
| 
								 | 
							
									get0(S,C),
							 | 
						||
| 
								 | 
							
									skip_header(C,S).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									
							 |