Next: CREATE..DOES> details, Previous: User-defined Defining Words, Up: User-defined Defining Words
CREATE..DOES>You may wonder how to use this feature. Here are some usage patterns:
When you see a sequence of code occurring several times, and you can
identify a meaning, you will factor it out as a colon definition. When
you see similar colon definitions, you can factor them using
CREATE..DOES>. E.g., an assembler usually defines several words
that look very similar:
     : ori, ( reg-target reg-source n -- )
         0 asm-reg-reg-imm ;
     : andi, ( reg-target reg-source n -- )
         1 asm-reg-reg-imm ;
   This could be factored with:
     : reg-reg-imm ( op-code -- )
         CREATE ,
     DOES> ( reg-target reg-source n -- )
         @ asm-reg-reg-imm ;
     
     0 reg-reg-imm ori,
     1 reg-reg-imm andi,
   Another view of CREATE..DOES> is to consider it as a crude way to
supply a part of the parameters for a word (known as currying in
the functional language community). E.g., + needs two
parameters. Creating versions of + with one parameter fixed can
be done like this:
     : curry+ ( n1 "name" -- )
         CREATE ,
     DOES> ( n2 -- n1+n2 )
         @ + ;
     
      3 curry+ 3+
     -2 curry+ 2-