C++中的函數對象(Function Object)為什麼叫函子(Functor)?

如題。Haskell 中 Functor 與範疇論中的概念對應,但是 C++ 中的函數對象好像並沒有這樣的關係啊?


C++ 所指的Functor 跟Haskell 所指的Functor完全不一樣。

Haskell 中的Functor是基於 Category Theory里數學定義的 Functor。

C++ 所謂的Functor 等同於 Functional object。跟Category Theory裡面的Functor不相關。具體的歷史緣由我不清楚。但估計C++ 起初應該是借用了 Functor這個名字,但沒用在對的地方。據說Stroustrup在80年代就這麼用過(https://www.quora.com/Why-is-the-term-functor-used-in-C++-denote-an-object-with-an-operator)。STL里一直也是把 callback 和 predicate稱為Functor。

不過鑒於現在Functional Programming影響力日增,基本上大多數C++ 標準會的人都改口不說functor,而是用更正規,不容易混淆的functional object。


https://en.oxforddictionaries.com/definition/functor

functor

noun

1.Logic Mathematics
A function; an operator.

2.Linguistics
another term for function word

Origin

1930s: from function, on the pattern of words such as factor.

看第一個義項


推薦閱讀:

如何評價即將正式 release 的 GHC 8.2.1 ?
Numerical Schrodinger Equation
仙境里的Haskell(之二)
如何解釋 Haskell 中的單子(Monad)?
剖析Haskell應用架構

TAG:C | 函數式編程 | Haskell |