Recursive fry
parent
f1113b7c2a
commit
decdaf1e32
|
@ -44,3 +44,7 @@ sequences ;
|
|||
: funny-dip '[ @ _ ] call ; inline
|
||||
|
||||
[ "hi" 3 ] [ "h" "i" 3 [ append ] funny-dip ] unit-test
|
||||
|
||||
[ { 1 2 3 } ] [
|
||||
3 1 '[ , [ , + ] map ] call
|
||||
] unit-test
|
||||
|
|
|
@ -9,41 +9,54 @@ IN: fry
|
|||
: @ "Only valid inside a fry" throw ;
|
||||
: _ "Only valid inside a fry" throw ;
|
||||
|
||||
DEFER: (fry)
|
||||
DEFER: (shallow-fry)
|
||||
|
||||
: ((fry)) ( accum quot adder -- result )
|
||||
>r [ ] swap (fry) r>
|
||||
: ((shallow-fry)) ( accum quot adder -- result )
|
||||
>r [ ] swap (shallow-fry) r>
|
||||
append swap dup empty? [ drop ] [
|
||||
[ swap compose ] curry append
|
||||
] if ; inline
|
||||
|
||||
: (fry) ( accum quot -- result )
|
||||
: (shallow-fry) ( accum quot -- result )
|
||||
dup empty? [
|
||||
drop 1quotation
|
||||
] [
|
||||
unclip {
|
||||
{ \ , [ [ curry ] ((fry)) ] }
|
||||
{ \ @ [ [ compose ] ((fry)) ] }
|
||||
{ \ , [ [ curry ] ((shallow-fry)) ] }
|
||||
{ \ @ [ [ compose ] ((shallow-fry)) ] }
|
||||
|
||||
! to avoid confusion, remove if fry goes core
|
||||
{ \ namespaces:, [ [ curry ] ((fry)) ] }
|
||||
{ \ namespaces:, [ [ curry ] ((shallow-fry)) ] }
|
||||
|
||||
[ swap >r suffix r> (fry) ]
|
||||
[ swap >r suffix r> (shallow-fry) ]
|
||||
} case
|
||||
] if ;
|
||||
|
||||
: trivial-fry ( quot -- quot' ) [ ] swap (fry) ;
|
||||
: shallow-fry ( quot -- quot' ) [ ] swap (shallow-fry) ;
|
||||
|
||||
: fry ( quot -- quot' )
|
||||
: deep-fry ( quot -- quot' )
|
||||
{ _ } last-split1 [
|
||||
[
|
||||
trivial-fry %
|
||||
shallow-fry %
|
||||
[ >r ] %
|
||||
fry %
|
||||
deep-fry %
|
||||
[ [ dip ] curry r> compose ] %
|
||||
] [ ] make
|
||||
] [
|
||||
trivial-fry
|
||||
shallow-fry
|
||||
] if* ;
|
||||
|
||||
: fry ( quot -- quot' )
|
||||
[
|
||||
[
|
||||
dup callable? [
|
||||
[
|
||||
[ { , namespaces:, @ } member? ] subset length
|
||||
\ , <repetition> %
|
||||
]
|
||||
[ deep-fry % ] bi
|
||||
] [ namespaces:, ] if
|
||||
] each
|
||||
] [ ] make deep-fry ;
|
||||
|
||||
: '[ \ ] parse-until fry over push-all ; parsing
|
||||
|
|
Loading…
Reference in New Issue