refactor so that generalizations reuses the stub versions of nsequence, firstn, and n*quot needed by memoize
parent
63842c7dc9
commit
b150deeb11
|
@ -10,7 +10,7 @@ IN: alien.parser
|
||||||
: parse-c-type-name ( name -- word )
|
: parse-c-type-name ( name -- word )
|
||||||
dup search [ nip ] [ no-word ] if* ;
|
dup search [ nip ] [ no-word ] if* ;
|
||||||
|
|
||||||
: parse-c-type ( string -- array )
|
: parse-c-type ( string -- type )
|
||||||
{
|
{
|
||||||
{ [ dup "void" = ] [ drop void ] }
|
{ [ dup "void" = ] [ drop void ] }
|
||||||
{ [ CHAR: ] over member? ] [ parse-array-type parse-c-type-name prefix ] }
|
{ [ CHAR: ] over member? ] [ parse-array-type parse-c-type-name prefix ] }
|
||||||
|
|
|
@ -2,22 +2,19 @@
|
||||||
! Cavazos, Slava Pestov.
|
! Cavazos, Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel sequences sequences.private math combinators
|
USING: kernel sequences sequences.private math combinators
|
||||||
macros quotations fry effects ;
|
macros quotations fry effects memoize.private ;
|
||||||
IN: generalizations
|
IN: generalizations
|
||||||
|
|
||||||
<<
|
<<
|
||||||
|
|
||||||
: n*quot ( n quot -- quot' ) <repetition> concat >quotation ;
|
ALIAS: n*quot (n*quot)
|
||||||
|
|
||||||
: repeat ( n obj quot -- ) swapd times ; inline
|
: repeat ( n obj quot -- ) swapd times ; inline
|
||||||
|
|
||||||
>>
|
>>
|
||||||
|
|
||||||
MACRO: nsequence ( n seq -- )
|
MACRO: nsequence ( n seq -- )
|
||||||
[
|
[ [nsequence] ] keep
|
||||||
[ drop iota <reversed> ] [ '[ _ _ new-sequence ] ] 2bi
|
|
||||||
[ '[ @ [ _ swap set-nth-unsafe ] keep ] ] reduce
|
|
||||||
] keep
|
|
||||||
'[ @ _ like ] ;
|
'[ @ _ like ] ;
|
||||||
|
|
||||||
MACRO: narray ( n -- )
|
MACRO: narray ( n -- )
|
||||||
|
@ -27,7 +24,7 @@ MACRO: nsum ( n -- )
|
||||||
1 - [ + ] n*quot ;
|
1 - [ + ] n*quot ;
|
||||||
|
|
||||||
MACRO: firstn-unsafe ( n -- )
|
MACRO: firstn-unsafe ( n -- )
|
||||||
iota [ '[ [ _ ] dip nth-unsafe ] ] map '[ _ cleave ] ;
|
[firstn] ;
|
||||||
|
|
||||||
MACRO: firstn ( n -- )
|
MACRO: firstn ( n -- )
|
||||||
dup zero? [ drop [ drop ] ] [
|
dup zero? [ drop [ drop ] ] [
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
! Copyright (C) 2007, 2009 Slava Pestov, Daniel Ehrenberg.
|
! Copyright (C) 2007, 2009 Slava Pestov, Daniel Ehrenberg.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel hashtables sequences arrays words namespaces make
|
USING: kernel hashtables sequences sequences.private arrays
|
||||||
parser math assocs effects definitions quotations summary
|
words namespaces make parser math assocs effects definitions
|
||||||
accessors fry ;
|
quotations summary accessors fry ;
|
||||||
IN: memoize
|
IN: memoize
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
@ -12,20 +12,20 @@ IN: memoize
|
||||||
: (n*quot) ( n quot -- quotquot )
|
: (n*quot) ( n quot -- quotquot )
|
||||||
<repetition> concat >quotation ;
|
<repetition> concat >quotation ;
|
||||||
|
|
||||||
: [narray] ( length -- quot )
|
: [nsequence] ( length exemplar -- quot )
|
||||||
[ [ 1 - ] keep '[ _ _ f <array> ] ]
|
[ [ [ 1 - ] keep ] dip '[ _ _ _ new-sequence ] ]
|
||||||
[ [ [ set-nth ] 2keep [ 1 - ] dip ] (n*quot) ] bi
|
[ drop [ [ set-nth-unsafe ] 2keep [ 1 - ] dip ] (n*quot) ] 2bi
|
||||||
[ nip ] 3append ;
|
[ nip ] 3append ;
|
||||||
|
|
||||||
: [firstn] ( length -- quot )
|
: [firstn] ( length -- quot )
|
||||||
[ 0 swap ] swap
|
[ 0 swap ] swap
|
||||||
[ [ nth ] 2keep [ 1 + ] dip ] (n*quot)
|
[ [ nth-unsafe ] 2keep [ 1 + ] dip ] (n*quot)
|
||||||
[ 2drop ] 3append ;
|
[ 2drop ] 3append ;
|
||||||
|
|
||||||
: packer ( seq -- quot )
|
: packer ( seq -- quot )
|
||||||
length dup 4 <=
|
length dup 4 <=
|
||||||
[ { [ f ] [ ] [ 2array ] [ 3array ] [ 4array ] } nth ]
|
[ { [ f ] [ ] [ 2array ] [ 3array ] [ 4array ] } nth ]
|
||||||
[ [narray] ] if ;
|
[ { } [nsequence] ] if ;
|
||||||
|
|
||||||
: unpacker ( seq -- quot )
|
: unpacker ( seq -- quot )
|
||||||
length dup 4 <=
|
length dup 4 <=
|
||||||
|
|
Loading…
Reference in New Issue