20 lines
		
	
	
		
			649 B
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			20 lines
		
	
	
		
			649 B
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								! Copyright (C) 2008 Marc Fauconneau.
							 | 
						||
| 
								 | 
							
								! See http://factorcode.org/license.txt for BSD license.
							 | 
						||
| 
								 | 
							
								USING: kernel arrays math accessors sequences math.vectors
							 | 
						||
| 
								 | 
							
								math.order sorting binary-search sets assocs fry suffix-arrays ;
							 | 
						||
| 
								 | 
							
								IN: suffix-arrays.words
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! to search on word names
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: new-word-sa ( words -- sa )
							 | 
						||
| 
								 | 
							
								    [ name>> ] map >suffix-array ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: name>word-map ( words -- map )
							 | 
						||
| 
								 | 
							
								    dup [ name>> V{ } clone ] H{ } map>assoc
							 | 
						||
| 
								 | 
							
								    [ '[ dup name>> _ at push ] each ] keep ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: query-word-sa ( map begin sa -- matches ) query '[ _ at ] map concat ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! usage example :
							 | 
						||
| 
								 | 
							
								! clear all-words 100 head dup name>word-map "test" rot new-word-sa query .
							 |