Next: , Previous: , Up: User-defined Defining Words   [Contents][Index]


6.10.10.3 Applications of CREATE..DOES>

あなたは、 この機能をどのように使用するのか不思議に思うかもしれません。 いくつかの使用パターンを以下に示します:

とあるコードのフレーズが複数回出現し、 その意味を同一視できる場合は、 それをコロン定義としてくくり出します。 類似のコロン定義が見つかった場合は、 CREATE..DOES> を使用してそれらをファクタリングできます。 たとえば、 アセンブラは通常、 非常によく似たいくつかのワードを定義します:

: ori, ( reg-target reg-source n -- )
    0 asm-reg-reg-imm ;
: andi, ( reg-target reg-source n -- )
    1 asm-reg-reg-imm ;

これは以下のようにファクタリングできます:

: 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,

CREATE..DOES> の別の観点は、 これをワードのパラメータの一部を提供する素朴な方法(関数型言語コミュニティではカリー化(currying)として知られています)とみなすことです。 たとえば、 + には 2 つのパラメータが必要ですが、そのうち 1 つのパラメータを固定した + のバージョンを作成するには、 以下のようにします:

: curry+ ( n1 "name" -- )
    CREATE ,
DOES> ( n2 -- n1+n2 )
    @ + ;

 3 curry+ 3+
-2 curry+ 2-