Hi Eduardo,

Chris Double's ogg player code uses a pair of words, slots and set- 
slots to read/write multiple slots:

{ player-foo player-bar } slots

is the same as

[ player-foo ] keep player-bar

There's a set-slots which reads inputs from the stack too:

{ set-player-foo set-player-bar } set-slots

this becomes

set-player-bar [ set-player-foo ] keep

As for custom constructors, how about this - its not coded but would  
be easy to cook up:

: <funny-player> { set-player-foo set-player-bar } player construct ;

: empty-tuple 1array >tuple ;
: construct empty-tuple [ swap set-slots ] keep ;

We could have it so that TUPLE: foo ... ; doesn't define a <foo> at  
all; C: foo <foo> defines a default <foo> "BOA" constructor, but any  
number of custom constructor words with any name can be defined to  
call 'construct' just by using :.

Note that the above would be more pleasant if slot words did not  
contain the tuple class name in them!

Slava

On 17-Jul-07, at 3:26 AM, Eduardo Cavazos wrote:

> Hello,
>
> Earlier today, I proposed some alternative conventions for tuples.  
> Here are
> some constructor words rewritten using the alternative system.
>
> The 8080 vocabulary also benefits according to some rewrites I did.  
> Basically
> anything that is tuple setter intensive should benefit.
>
> Ed
>
> ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
> !!
>
> ! inference.backend
>
> TUPLE: inference-error rstate major? ;
>
> ! original:
>
> C: inference-error ( msg rstate important? -- error )
>     [ set-inference-error-major? ] keep
>     [ set-inference-error-rstate ] keep
>     [ set-delegate ] keep ;
>
> ! alternative:
>
> : <inference-error> ( msg rstate important? -- error )
> <inference-error*> swap set-delegate ;
>
> ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
> !!
>
> ! parser
>
> TUPLE: parse-error file line col text ;
>
> ! original:
>
> C: parse-error ( msg -- error )
>     file get over set-parse-error-file
>     lexer get lexer-line over set-parse-error-line
>     lexer get lexer-column over set-parse-error-col
>     lexer get line-text over set-parse-error-text
>     [ set-delegate ] keep ;
>
> ! alternative:
>
> : <parse-error> ( msg -- error )
>> r
> file get
> lexer get lexer-line
> lexer get lexer-column
> lexer get line-text
> <parser-error*>
> r> set-delegate ;
>
> ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
> !!
>
> ! ui.commands
>
> TUPLE: command-map blurb;
>
> ! original:
>
> C: command-map ( blurb commands -- command-map )
>     swap { } like over set-delegate
>     [ set-command-map-blurb ] keep ;
>
> ! alternative:
>
> : <command-map> ( blurb commands -- command-map )
>> r <command-map*> r> { } like set-delegate ;
>
>
> ---------------------------------------------------------------------- 
> ---
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> _______________________________________________
> Factor-talk mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/factor-talk


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Factor-talk mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to