1 ! Copyright (C) 2006, 2007 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: assocs kernel sequences sets ;
8 : nest ( vertex graph -- edges )
9 [ drop HS{ } clone ] cache ; inline
13 : add-vertex ( vertex edges graph -- )
14 [ nest adjoin ] curry with each ; inline
16 : remove-vertex ( vertex edges graph -- )
17 [ at delete ] curry with each ; inline
21 : (closure) ( vertex set quot: ( vertex -- edges ) -- )
23 [ dip ] keep [ (closure) ] 2curry each
24 ] [ 3drop ] if ; inline recursive
26 : new-empty-set-like ( exemplar -- set )
27 f swap set-like clone ; inline
31 : closure-as ( vertex quot: ( vertex -- edges ) exemplar -- set )
32 new-empty-set-like [ swap (closure) ] keep ; inline
34 : closure ( vertex quot: ( vertex -- edges ) -- set )
35 HS{ } closure-as ; inline