2005-09-17 22:52:02 -04:00
|
|
|
IN: inference
|
2005-11-29 23:49:59 -05:00
|
|
|
USING: arrays generic interpreter kernel math namespaces
|
2006-08-15 03:01:24 -04:00
|
|
|
sequences words parser ;
|
2005-09-17 22:52:02 -04:00
|
|
|
|
|
|
|
: infer-shuffle-inputs ( shuffle node -- )
|
|
|
|
>r dup shuffle-in-d length swap shuffle-in-r length r>
|
|
|
|
node-inputs ;
|
|
|
|
|
|
|
|
: shuffle-stacks ( shuffle -- )
|
|
|
|
#! Shuffle simulated stacks.
|
|
|
|
meta-d get meta-r get rot shuffle meta-r set meta-d set ;
|
|
|
|
|
|
|
|
: infer-shuffle-outputs ( shuffle node -- )
|
|
|
|
>r dup shuffle-out-d length swap shuffle-out-r length r>
|
|
|
|
node-outputs ;
|
|
|
|
|
|
|
|
: infer-shuffle ( shuffle -- )
|
|
|
|
#shuffle
|
|
|
|
2dup infer-shuffle-inputs
|
|
|
|
over shuffle-stacks
|
|
|
|
tuck infer-shuffle-outputs
|
|
|
|
node, ;
|
|
|
|
|
|
|
|
: shuffle>effect ( shuffle -- effect )
|
2006-08-15 03:01:24 -04:00
|
|
|
dup shuffle-in-d swap shuffle-out-d <effect> ;
|
2005-09-17 22:52:02 -04:00
|
|
|
|
|
|
|
: define-shuffle ( word shuffle -- )
|
|
|
|
[ shuffle>effect "infer-effect" set-word-prop ] 2keep
|
|
|
|
[ , \ infer-shuffle , ] [ ] make "infer" set-word-prop ;
|
|
|
|
|
2005-10-29 23:25:38 -04:00
|
|
|
{
|
|
|
|
{ drop T{ shuffle f 1 0 { } { } } }
|
|
|
|
{ 2drop T{ shuffle f 2 0 { } { } } }
|
|
|
|
{ 3drop T{ shuffle f 3 0 { } { } } }
|
|
|
|
{ dup T{ shuffle f 1 0 { 0 0 } { } } }
|
|
|
|
{ 2dup T{ shuffle f 2 0 { 0 1 0 1 } { } } }
|
|
|
|
{ 3dup T{ shuffle f 3 0 { 0 1 2 0 1 2 } { } } }
|
|
|
|
{ rot T{ shuffle f 3 0 { 1 2 0 } { } } }
|
|
|
|
{ -rot T{ shuffle f 3 0 { 2 0 1 } { } } }
|
|
|
|
{ dupd T{ shuffle f 2 0 { 0 0 1 } { } } }
|
|
|
|
{ swapd T{ shuffle f 3 0 { 1 0 2 } { } } }
|
|
|
|
{ nip T{ shuffle f 2 0 { 1 } { } } }
|
|
|
|
{ 2nip T{ shuffle f 3 0 { 2 } { } } }
|
|
|
|
{ tuck T{ shuffle f 2 0 { 1 0 1 } { } } }
|
|
|
|
{ over T{ shuffle f 2 0 { 0 1 0 } { } } }
|
|
|
|
{ pick T{ shuffle f 3 0 { 0 1 2 0 } { } } }
|
|
|
|
{ swap T{ shuffle f 2 0 { 1 0 } { } } }
|
|
|
|
{ >r T{ shuffle f 1 0 { } { 0 } } }
|
|
|
|
{ r> T{ shuffle f 0 1 { 0 } { } } }
|
|
|
|
} [ first2 define-shuffle ] each
|