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
 |