Как стать автором
Обновить

Комментарии 39

ОМГ как можно «functor» прочитать как функтор?
фанктер?)
Вы издеваетесь?

Прослушайте в гугле, если не верите
Пруф
И? А слово «функция» вы по-русски тоже говорите «фанкшион»?
А вы функшион?

Ненадо путать слово «функция», которое нормально переводится с английского, с термином, у которого нет однозначного перевода в одно слово, следовательно используем термин с точным английским произношением фанктор (и произносить, конечно, желательно на английский манер)
Вобщем-то есть вполне сложивщийся, устоявшийся как в математике, так и в программировании русский термин — функтор. Я не америку открываю и не сам это придумал. Как связано произношение в английском языке и русский перевод? Почему слово произносится слово фУнкция, но однокоренное с ним слов фАнкчер?
лучше чтоб по корню слова смысл был понятен, здесь оно важнее. Без смысла слово мертвое)
Нет. Если бы вы прочитали статьи в википедии, то уже знали бы, что термин пришёл из философии и имеет немецкое, а не английское происхождение.
Вы один из тех, кто считает, что все языки произошли от английского и должны пользоваться правилами английского языка? Что-нибудь про латинский слышали? Древнее римляне тоже произносили слово functio с английским акцентом?
Вы еще скажите что слово sputnik надо читать как спатник.
Прослушайте, я снова окажусь прав в произношении, ориентируясь на гугл
Пруф
Попробуйте ориентироваться на здравый смысл. Иногда это полезней тыканья в гугл.
По-моему Вы, кто вступил со мной в дискуссию, из тех людей, которые джаву называют явой.

Пожалуйста, называйте как хотите, не мне же за Вас краснеть
  1. Букур И., Деляну А. Введение в теорию категорий и функторов. М.: Мир, 1972
  2. Двойственность Экмана–Хилтона и теория функторов в категории топологических пространств
    Д. Б. Фукс
    УМН, 21:2(128) (1966)

И т.д.

Кроме Qt есть ещё много прекрасного, разного. ;)
Я в курсе :)
Когда с STL работал, говорил именно так, как правильно произносится, а минусовать мне за чью-то давнишнюю ошибку перевода нехорошо!

Честно, не знал, что в большом количестве литературы перевели как функтор, моя оплошность, однако это не делает предложенный мной вариант произношения неверным!
Вы совершенно правы, «functor» читается как «фанктор», но «функтор» читается как «функтор», таков уж принятый термин.

Кроме того, «функтор» гораздо благозвучнее.
Почему это «функтор» — ошибка перевода? Вам уже указали на то, что слова «функтор» и «функция» — однокоренные, соответственно никаких ваших фанктеров быть не может. Вы, конечно, молодец, что интересуетесь другими языками, но и свой забывать не стоит. Из-за «фанктеров» в языке появляются уродливые слова-кальки без языковой истории.
Подтяните свои знания математики чтоб нам за вас не краснеть.
А Вы, пардон, кто такой, чтобы быть за меня в ответе, да и говорить за всех?
< Любое мое сообщение >

Минусуйте на здоровье!
В кои-то веки соглашусь со мнением здешней общественности. Утверждать отсутствие однозначного перевода в одно слово для термина, используемого в русскоязычной литературе с середины XX века, как минимум, странно.
плиз донт эпплай ë инкомплит нолидж ов инглиш ту рашн сайнтифик вокэбъюлари. итс джат рон.
Мне как математику очень огорчительно видеть такую картину. Использование устоявшихся понятий в отличном от общепринятого смысле — зло, а люди, которые подменяют наименования, совершают акт вредительства.
В ML и Хаскеле функторы не далеки от математического собрата. Жаль только что именно определение С++ наиболее популярно.
Мне как математику крайне непонятно до сих пор, как правильно говорить:
«ко'мплексные» или «компле'ксные» (слово встречается не только для чисел),
«ре'шать» или «реша'ть».

Я о том, что среди математиков столько диалектов есть и многие даже гордятся своим произношением, также как и написанием греческого алфавита.

В общем, главное, чтобы человек был хороший :)
Стоит заметить, что в Functor в Haskell — это эндофунктор.
Любопытная мысль. Я так понимаю, что вы подразумеваете все типы как объекты и функции как морфизмы. Тогда действительно получается эндофунктор. Но разве нельзя выделить пару полных подкатегорий и определить функтор между ними?
Так ведь
fmap : (a -> b) -> f a -> f b
обязан работать на любых типах и морфизмах.

В Control.Category есть класс Category, так что должно было быть так:
fmap : g a b -> h (f a) (f b)

Ну я не про fmap конкретно говорил, я имел ввиду что в хаскеле наверно можно и не только функтор с такой сигнатурой объявить. Можно например попробовать рассмотреть подкатегорию списков и еще какую-нибудь, скажем Maybe и объявить функтор между ними.
Получится функтор который объекты одной подкатегории (maybe) отображает в объекты другой (списки) и морфизмы одной (Maybe a -> Maybe b) в морфизмы другой ([a] -> [b]). Что-то вроде
class MaybeListFunctor where
f :: Maybe a -> [a]
g :: (Maybe a -> Maybe b) -> [a] -> [b]
чем не функтор?
Простите если где ошибки, я в хаскеле не силен. А за Control.Category отдельное спасибо :) Покопаюсь на досуге
Таким образом, конечно, можно.
Кстати, если data-accessor сделать инстансом Control.Category, то можно будет писать
(tail.head.second ^= 12) [('x', 125), ('a', 11)]
:)
В Haskell все функторы суть эндофункторы категории Hask, за пределы которой выйти нельзя. В частности именно поэтому в Prelude должно быть отношение Functor => Monad.

Что касается выделения подкатегорий… в принципе можно сделать что-то подобное с помощью Control.Category, но это будет уже совсем не обычных хаскельный функтор.
Я выше написал что имел ввиду :) Понятно что выйти за пределы типов хаскеля нельзя и понятно почему Functor объявлен именно так. Меня просто заинтересовала мысль про эндофунктор, я об этом как-то не задумывался никогда (да собственно у меня опыта с хаскелем почти 0, поэтому я о нем мало думаю). Просто подумал, что можно ведь не только функтор с такой сигнатурой объявить. Да и не любой эндофунктор в хаскеле можно под эту сигнатуру подогнать. Это я просто так мыслю вслух, не обращайте внимания :)
Это, к слову, является следствием того, что композиция (аппликативных) функторов — тоже (аппликативный) функтор. Для монад это уже, увы, неверно.
зато у монад по определению есть join
И? Композиция у них от этого не появляется.
Фига себе функторы в Прологе! Вот так пишешь-пишешь статьи , а толку (

Мне кажется это надо срочно подправить.
Функтор в Прологе это синоним терм, никаких больше значений он не имеет!
Стандартный предикат functor/2 (из пункта 2), это предикат с названием 'functor'/2.

Пример likes некорректен, потому что это предикат. В Прологе существует возможность функтор, вызывать как предикат типа:
likes(X) :- X.
Принимается терм, а вызывается уже предикат. Но это большая разница, так как в исходном Прологе это запрещено (как рефлексия в C++, хочется — нету, но кое-где появляется), так как такое использование термов ведет логикам второго порядка, а изначально Пролог — это хорновские дизъюнкты логики 1-го порядка.

Напишу в послесловие, откуда появились функторы в Прологе и что они означают. На самом деле понятие функторов в Прологе наверное самое правильное, чем во всех остальных языках, так как оно сложилось еще в 30-е годы в математической логике.

В математике часто встречаются определения: «для любого X существует Y», по сути дела это и есть функциональная зависимость. Так у этих функциональных зависимостей есть имя или его можно придумать, то договорились о краткой записи: plus(X, Y) — «для любого X, Y существует Z» и далее каким условиям удовлетворяет или в каких отношениях состоит. Благодаря, этому сокращению можно убрать все кванторы, кванторы существования заменяются функторами (отличия от функции теоритически нету, так как любому функтору можно поставить в соотвествию функцию, функцией чаще называют то, что эффективно вычислимо), а кванторы общности просто опускаются и остаются одни переменные.
Спасибо за информацию. Статья не моя, это перевод, поэтому исправлять я, вроде как, не имею морального права, но я дам добавлю ссылку на ваш комментарий в конец топика.
Функторы в C++ являются сокращением от «функциональные объекты».
Что-то я не вижу, как тут сокращение получилось.

Насколько я помню, всё было немного иначе.

До С++ функторы появились в С, и там это было сокращение-гармошка (portmanteau) от «FUNCtion poinTER» (с поправкой на e/o, но это хотя бы какой-то смысл имеет, в отличие от «object»). Потом в С++ это понятие расширили на любое значение, которое можно вызывать как функцию.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории