30 lines
		
	
	
		
			702 B
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			30 lines
		
	
	
		
			702 B
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								! Copyright (C) 2006, 2007 Slava Pestov.
							 | 
						||
| 
								 | 
							
								! See http://factorcode.org/license.txt for BSD license.
							 | 
						||
| 
								 | 
							
								USING: assocs kernel sequences sets ;
							 | 
						||
| 
								 | 
							
								IN: graphs
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<PRIVATE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: nest ( vertex graph -- edges )
							 | 
						||
| 
								 | 
							
								    [ drop HS{ } clone ] cache ; inline
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								PRIVATE>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: add-vertex ( vertex edges graph -- )
							 | 
						||
| 
								 | 
							
								    [ nest adjoin ] curry with each ; inline
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: remove-vertex ( vertex edges graph -- )
							 | 
						||
| 
								 | 
							
								    [ at delete ] curry with each ; inline
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<PRIVATE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 : (closure) ( vertex set quot: ( vertex -- edges ) -- )
							 | 
						||
| 
								 | 
							
								     2over ?adjoin [
							 | 
						||
| 
								 | 
							
								         [ dip ] keep [ (closure) ] 2curry each
							 | 
						||
| 
								 | 
							
								     ] [ 3drop ] if ; inline recursive
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								PRIVATE>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: closure ( vertex quot: ( vertex -- edges ) -- set )
							 | 
						||
| 
								 | 
							
								    HS{ } clone [ swap (closure) ] keep ; inline
							 |