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
|