factor/unfinished/compiler/tree/combinators/combinators.factor

31 lines
806 B
Factor
Raw Normal View History

2008-07-20 05:24:37 -04:00
! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: fry kernel accessors sequences sequences.deep
compiler.tree ;
2008-07-20 05:24:37 -04:00
IN: compiler.tree.combinators
: each-node ( nodes quot -- )
dup dup '[
, [
dup #branch? [
children>> [ , each-node ] each
] [
dup #recursive? [
child>> , each-node
] [ drop ] if
] if
] bi
] each ; inline
: map-nodes ( nodes quot: ( node -- node' ) -- nodes )
dup dup '[
@
dup #branch? [
[ [ , map-nodes ] map ] change-children
] [
dup #recursive? [
[ , map-nodes ] change-child
] when
] if
] map flatten ; inline recursive