]> gitweb.factorcode.org Git - factor.git/blob - core/graphs/graphs.factor
interpolate: split out format into a hook
[factor.git] / core / graphs / graphs.factor
1 ! Copyright (C) 2006, 2007 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: assocs kernel sequences sets ;
4 IN: graphs
5
6 <PRIVATE
7
8 : nest ( vertex graph -- edges )
9     [ drop HS{ } clone ] cache ; inline
10
11 PRIVATE>
12
13 : add-vertex ( vertex edges graph -- )
14     [ nest adjoin ] curry with each ; inline
15
16 : remove-vertex ( vertex edges graph -- )
17     [ at delete ] curry with each ; inline
18
19 <PRIVATE
20
21  : (closure) ( vertex set quot: ( vertex -- edges ) -- )
22      2over ?adjoin [
23          [ dip ] keep [ (closure) ] 2curry each
24      ] [ 3drop ] if ; inline recursive
25
26  : new-empty-set-like ( exemplar -- set )
27      f swap set-like clone ; inline
28
29 PRIVATE>
30
31 : closure-as ( vertex quot: ( vertex -- edges ) exemplar -- set )
32     new-empty-set-like [ swap (closure) ] keep ; inline
33
34 : closure ( vertex quot: ( vertex -- edges ) -- set )
35     HS{ } closure-as ; inline