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-