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應用架構