factor/core/graphs/graphs.factor

37 lines
882 B
Factor

! Copyright (C) 2006, 2007 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: assocs kernel namespaces sequences ;
IN: graphs
SYMBOL: graph
: if-graph ( vertex edges graph quot -- )
over
[ graph swap with-variable ]
[ 2drop 2drop ] if ; inline
: nest ( key -- hash )
graph get [ drop H{ } clone ] cache ;
: add-vertex ( vertex edges graph -- )
[ [ dupd nest set-at ] with each ] if-graph ; inline
: remove-vertex ( vertex edges graph -- )
[ [ graph get at delete-at ] with each ] if-graph ; inline
SYMBOL: previous
: (closure) ( obj quot -- )
over previous get key? [
2drop
] [
over dup previous get set-at
dup slip
[ nip (closure) ] curry assoc-each
] if ; inline
: closure ( obj quot -- assoc )
H{ } clone [
previous [ (closure) ] with-variable
] keep ; inline