Я не понимаю Factor's functors. Думаю, это поможет понять, что такое «функтор».Что такое функторы и зачем они нам нужны?
Google говорит:
функция; оператора.
В Factor все функции (слова) являются операторами и являются первоклассными. (На самом деле, я не могу думать о многом в Факторе, что не первый класс). Это определение не так полезно.
Википедия говорит:
Functor может означать:
- ...
- В компьютерном программировании:
- функциональный объект используется для передачи указателей на функции наряду с его состоянием
- ...
- В Haskell Функтор описывает обобщение функций, которые выполняют операции отображения
Страница для "функции объекта" говорит:
объект, который нужно вызвать или вызвать, как если бы он был обычной функцией, обычно с тем же синтаксисом (параметр функции, который также может быть функцией).
Итак, функтор является первоклассной функцией? Это ничего особенного, и любые слова, цитаты и прочее уже являются первоклассными в Factor.
Фактор Функторы имеют странный синтаксис, который напоминает мне дженерики или что-то в этом роде.
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
документация крайне скудны на них. Кто они такие? Когда я должен их использовать?
О, черт возьми, это действительно круто ... – cat