2007-09-20 18:09:08 -04:00
|
|
|
|
2008-07-02 12:43:14 -04:00
|
|
|
USING: kernel parser namespaces sequences quotations arrays vectors splitting
|
2008-07-09 00:05:25 -04:00
|
|
|
strings words math generalizations
|
|
|
|
macros combinators.lib combinators.conditional newfx ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
IN: bake
|
|
|
|
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
|
2008-06-30 11:31:12 -04:00
|
|
|
SYMBOL: ,
|
|
|
|
SYMBOL: @
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-06-30 11:31:12 -04:00
|
|
|
: comma? ( obj -- ? ) , = ;
|
|
|
|
: atsym? ( obj -- ? ) @ = ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-06-30 11:31:12 -04:00
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-07-02 12:43:14 -04:00
|
|
|
DEFER: [bake]
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-06-30 11:31:12 -04:00
|
|
|
: broil-element ( obj -- quot )
|
|
|
|
{
|
2008-07-02 12:43:14 -04:00
|
|
|
{ [ comma? ] [ drop [ >r ] ] }
|
2008-07-08 23:58:34 -04:00
|
|
|
{ [ f = ] [ [ >r ] prefix-on ] }
|
2008-07-02 13:09:03 -04:00
|
|
|
{ [ integer? ] [ [ >r ] prefix-on ] }
|
2008-07-08 23:58:34 -04:00
|
|
|
{ [ string? ] [ [ >r ] prefix-on ] }
|
2008-07-02 12:43:14 -04:00
|
|
|
{ [ sequence? ] [ [bake] [ >r ] append ] }
|
2008-07-04 16:01:03 -04:00
|
|
|
{ [ word? ] [ literalize [ >r ] prefix-on ] }
|
2008-07-02 12:43:14 -04:00
|
|
|
{ [ drop t ] [ [ >r ] prefix-on ] }
|
2008-06-30 11:31:12 -04:00
|
|
|
}
|
|
|
|
1cond ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
|
2008-07-02 12:43:14 -04:00
|
|
|
: constructor ( seq -- quot )
|
|
|
|
{
|
|
|
|
{ [ array? ] [ length [ narray ] prefix-on ] }
|
2008-07-04 16:01:03 -04:00
|
|
|
! { [ quotation? ] [ length [ ncurry ] prefix-on [ ] prefix ] }
|
|
|
|
{ [ quotation? ] [ length [ narray >quotation ] prefix-on ] }
|
|
|
|
{ [ vector? ] [ length [ narray >vector ] prefix-on ] }
|
2008-07-02 12:43:14 -04:00
|
|
|
}
|
|
|
|
1cond ;
|
|
|
|
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
|
|
|
|
: [broil] ( seq -- quot )
|
2008-06-30 11:31:12 -04:00
|
|
|
[ reverse [ broil-element ] map concat ]
|
2008-07-02 12:43:14 -04:00
|
|
|
[ length [ drop [ r> ] ] map concat ]
|
|
|
|
[ constructor ]
|
2008-06-30 11:31:12 -04:00
|
|
|
tri append append
|
|
|
|
>quotation ;
|
2007-11-21 19:33:39 -05:00
|
|
|
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
|
2008-07-02 12:43:14 -04:00
|
|
|
SYMBOL: saved-sequence
|
|
|
|
|
|
|
|
: [connector] ( -- quot )
|
|
|
|
saved-sequence get quotation? [ [ compose ] ] [ [ append ] ] if ;
|
|
|
|
|
|
|
|
: [starter] ( -- quot )
|
|
|
|
saved-sequence get
|
|
|
|
{
|
|
|
|
{ [ quotation? ] [ drop [ [ ] ] ] }
|
|
|
|
{ [ array? ] [ drop [ { } ] ] }
|
|
|
|
{ [ vector? ] [ drop [ V{ } ] ] }
|
|
|
|
}
|
|
|
|
1cond ;
|
|
|
|
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
|
|
|
|
: [simmer] ( seq -- quot )
|
|
|
|
|
|
|
|
dup saved-sequence set
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-06-30 11:31:12 -04:00
|
|
|
{ @ } split reverse
|
2008-07-02 12:43:14 -04:00
|
|
|
[ [ [bake] [connector] append [ >r ] append ] map concat ]
|
|
|
|
[ length [ drop [ r> ] [connector] append ] map concat ]
|
2008-06-30 11:31:12 -04:00
|
|
|
bi
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-07-02 12:43:14 -04:00
|
|
|
>r 1 invert-index pluck r> ! remove the last append/compose
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-07-02 12:43:14 -04:00
|
|
|
[starter] prepend
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-06-30 11:31:12 -04:00
|
|
|
append ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-06-30 11:31:12 -04:00
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-07-02 12:43:14 -04:00
|
|
|
: [bake] ( seq -- quot ) [ @ member? ] [ [simmer] ] [ [broil] ] 1if ;
|
|
|
|
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-07-02 12:43:14 -04:00
|
|
|
MACRO: bake ( seq -- quot ) [bake] ;
|
2007-11-20 02:57:22 -05:00
|
|
|
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
|
2008-07-09 13:22:07 -04:00
|
|
|
: `{ \ } [ >array ] parse-literal \ bake parsed ; parsing
|
2008-07-02 12:43:14 -04:00
|
|
|
: `V{ \ } [ >vector ] parse-literal \ bake parsed ; parsing
|
2008-07-14 17:38:37 -04:00
|
|
|
: `[ \ ] [ >quotation ] parse-literal \ bake parsed ; parsing
|