2

Factor のfunctorがわかりません。「ファンクター」とは何かを最初に理解するのに役立つと思います。

Google は次のように述べています。

機能; オペレーター。

Factor では、すべての関数 (単語) は演算子であり、ファーストクラスです。(実際、Factor ではファーストクラスではないものはあまり思い浮かびません)。この定義はあまり役に立ちません。

ウィキペディアは次のように述べています。

Functor は以下を参照できます。

  • ...
  • コンピュータプログラミングでは:
    • 関数ポインタをその状態とともに渡すために使用される関数オブジェクト
    • ...
    • Haskell では、Functor はマッピング操作を実行する関数の一般化を記述します

「関数オブジェクト」のページには次のように書かれています:

通常の関数であるかのように呼び出される、または呼び出されるオブジェクトで、通常は同じ構文 (関数にすることもできる関数パラメーター) を使用します。

では、ファンクターはファーストクラスの関数ですか? これは特別なことではありません。とにかく、言葉や引用などはすでに Factor の第一級のものです。

Factor Functor には、ジェネリックか何かを思い起こさせる奇妙な構文があります。

resource:unmaintained/models/combinators/templates/templates.factor :

FROM: models.combinators => <collection> #1 ;
FUNCTOR: fmaps ( W -- )
W IS ${W}
w-n      DEFINES ${W}-n
w-2      DEFINES 2${W}
w-3      DEFINES 3${W}
w-4      DEFINES 4${W}
w-n*     DEFINES ${W}-n*
w-2*     DEFINES 2${W}*
w-3*     DEFINES 3${W}*
w-4*     DEFINES 4${W}*
WHERE
MACRO: w-n ( int -- quot ) dup '[ [ _ narray <collection> ] dip [ _ firstn ] prepend W ] ;
: w-2 ( a b quot -- mapped ) 2 w-n ; inline
: w-3 ( a b c quot -- mapped ) 3 w-n ; inline
: w-4 ( a b c d quot -- mapped ) 4 w-n ; inline
MACRO: w-n* ( int -- quot ) dup '[ [ _ narray <collection> #1 ] dip [ _ firstn ] prepend W ] ;
: w-2* ( a b quot -- mapped ) 2 w-n* ; inline
: w-3* ( a b c quot -- mapped ) 3 w-n* ; inline
: w-4* ( a b c d quot -- mapped ) 4 w-n* ; inline
;FUNCTOR

これらに関するドキュメントは非常にまばらです。彼らは何ですか?いつ使用する必要がありますか?

4

1 に答える 1