reduce number of primitive dip/curries generated by fry

db4
Joe Groff 2009-11-07 21:34:16 -06:00
parent cbf2a2131f
commit 972a63630f
1 changed files with 10 additions and 7 deletions

View File

@ -29,22 +29,25 @@ PREDICATE: fried-callable < callable
count-inputs 0 > ;
INSTANCE: fried-callable fried
: [ncurry] ( n -- quot )
: (ncurry) ( quot n -- quot )
{
{ 0 [ [ ] ] }
{ 1 [ [ curry ] ] }
{ 2 [ [ 2curry ] ] }
{ 3 [ [ 3curry ] ] }
[ \ curry <repetition> >quotation ]
{ 0 [ ] }
{ 1 [ \ curry suffix! ] }
{ 2 [ \ 2curry suffix! ] }
{ 3 [ \ 3curry suffix! ] }
[ [ \ 3curry suffix! ] dip 3 - (ncurry) ]
} case ;
: [ncurry] ( n -- quot )
[ V{ } clone ] dip (ncurry) >quotation ;
: [ndip] ( quot n -- quot' )
{
{ 0 [ \ call [ ] 2sequence ] }
{ 1 [ \ dip [ ] 2sequence ] }
{ 2 [ \ 2dip [ ] 2sequence ] }
{ 3 [ \ 3dip [ ] 2sequence ] }
[ [ \ dip [ ] 2sequence ] times ]
[ [ \ 3dip [ ] 2sequence ] dip 3 - [ndip] ]
} case ;
: (make-curry) ( tail quot -- quot' )