reduce number of primitive dip/curries generated by fry
parent
cbf2a2131f
commit
972a63630f
|
@ -29,22 +29,25 @@ PREDICATE: fried-callable < callable
|
||||||
count-inputs 0 > ;
|
count-inputs 0 > ;
|
||||||
INSTANCE: fried-callable fried
|
INSTANCE: fried-callable fried
|
||||||
|
|
||||||
: [ncurry] ( n -- quot )
|
: (ncurry) ( quot n -- quot )
|
||||||
{
|
{
|
||||||
{ 0 [ [ ] ] }
|
{ 0 [ ] }
|
||||||
{ 1 [ [ curry ] ] }
|
{ 1 [ \ curry suffix! ] }
|
||||||
{ 2 [ [ 2curry ] ] }
|
{ 2 [ \ 2curry suffix! ] }
|
||||||
{ 3 [ [ 3curry ] ] }
|
{ 3 [ \ 3curry suffix! ] }
|
||||||
[ \ curry <repetition> >quotation ]
|
[ [ \ 3curry suffix! ] dip 3 - (ncurry) ]
|
||||||
} case ;
|
} case ;
|
||||||
|
|
||||||
|
: [ncurry] ( n -- quot )
|
||||||
|
[ V{ } clone ] dip (ncurry) >quotation ;
|
||||||
|
|
||||||
: [ndip] ( quot n -- quot' )
|
: [ndip] ( quot n -- quot' )
|
||||||
{
|
{
|
||||||
{ 0 [ \ call [ ] 2sequence ] }
|
{ 0 [ \ call [ ] 2sequence ] }
|
||||||
{ 1 [ \ dip [ ] 2sequence ] }
|
{ 1 [ \ dip [ ] 2sequence ] }
|
||||||
{ 2 [ \ 2dip [ ] 2sequence ] }
|
{ 2 [ \ 2dip [ ] 2sequence ] }
|
||||||
{ 3 [ \ 3dip [ ] 2sequence ] }
|
{ 3 [ \ 3dip [ ] 2sequence ] }
|
||||||
[ [ \ dip [ ] 2sequence ] times ]
|
[ [ \ 3dip [ ] 2sequence ] dip 3 - [ndip] ]
|
||||||
} case ;
|
} case ;
|
||||||
|
|
||||||
: (make-curry) ( tail quot -- quot' )
|
: (make-curry) ( tail quot -- quot' )
|
||||||
|
|
Loading…
Reference in New Issue