通俗解釋什麼函式程式設計中的函子Functors? - iRi
什麼是函子?
事實:如果您有Blob的來源,以及可以將Blob轉換為Thing的函式,則可以將它們放在一起以建立Things的來源。
例子:
- 如果我有 A(一個整數列表)和 B(一個將整數轉換為字串的函式),我可以輕鬆建立 C(一個字串列表)。
- 如果我有 A(一個整數到字串的雜湊表),和 B(一個將字串轉換為布林值的函式),我可以有 C(一個整數到布林值的雜湊表)。
那什麼是函子Functor 呢?函子Functor 是一個介面(或“特徵”、“概念”、“型別類”或任何您的語言喜歡的東西;從現在開始使用“介面”,因為我有意嘗試使用更常用的術語),它允許您將上述事實稱為一流的語言元素。在 Haskell 的案例中,Functor是透過提供fmap實現來實現的。對於上述示例,函式將:
- 列表實現:獲取 B 中的函式並在我的所有元素上執行它並返回一個新列表,通常稱為map。
- 雜湊表實現:取B中的函式對我所有的值執行它,返回一個具有相同鍵和新值的新雜湊表。
- 函式實現:返回一個在A中執行函式的函式,然後在結果上執行B中的函式。這通常稱為函式組合。
最後一個有點棘手,但是如果您將其比喻中的函式視為在左側接受輸入並在右側提供輸出的黑匣子,那就是將第二個函式猛烈撞擊第一個函式的右側建立一個新的。這就是為什麼我說某物的“來源”;這裡的原則非常通用,並且超越了函式、容器和我擁有的所有其他方便的詞……它適用於您可能從中獲取值的任何事物。
“函子”不是名詞
出於他們自己的充分理由,數學家使用“函子”作為具體名詞。Haskell 複製了這個,因此你經常聽到“一個函子”。
然而,介面是描述資料結構的形容詞,這就是為什麼在許多語言中它們通常以-able字尾(Iterable、Serializable 等)命名。程式設計師最好將其視為 Functable 或 Fmapable 或類似的東西。
“函子”並不總是容器
函子可以應用於許多不是容器的東西。我們已經在函式中看到了這一點。在非 Haskell 實現中,假設函子實現只能在容器上執行是一個常見的錯誤。
關於什麼是單子Monads點選標題見原文。
函子是我們可以隨意找到的自然事物。Monad 實現通常需要我們實際上經過深思熟慮來構建以適應抽象。
相關文章
- 通俗解釋什麼是響應式程式設計?程式設計
- 瞭解 JavaScript 函數語言程式設計 -- 什麼是純函式JavaScript函數程式設計函式
- 【趣解程式設計】函式程式設計函式
- 數學知識-核函式的通俗解釋例項函式
- 函式程式設計函式程式設計
- 瞭解 JavaScript 函數語言程式設計 - 宣告式函式JavaScript函數程式設計函式
- 函數語言程式設計 - Swift中的Functor(函子)、Monad(單子)、Applicative函數程式設計SwiftAPP
- Java中的函數語言程式設計(二)函式式介面Functional InterfaceJava函數程式設計函式Function
- 函式式思維: 為什麼函數語言程式設計越來越受關注函式函數程式設計
- Shell程式設計-09-Shell中的函式程式設計函式
- Scala 函數語言程式設計(一) 什麼是函數語言程式設計?函數程式設計
- scala 函式程式設計函式程式設計
- 函式程式設計之道函式程式設計
- 什麼是函數語言程式設計函數程式設計
- 什麼叫雲端計算?雲端計算通俗解釋
- 最通俗易懂的 Swift 函數語言程式設計Swift函數程式設計
- javascript函子是什麼JavaScript
- 子父類中函式函式
- 什麼是函式響應式程式設計(Functional Reactive Programming:FRP)函式程式設計FunctionReactFRP
- Windows 程式設計常用函式Windows程式設計函式
- python中fork()函式生成子程式分析Python函式
- 理解函數語言程式設計中的函式組合--Monoids(二)函數程式設計函式Mono
- JS函數語言程式設計概念理解:函子(Functor)JS函數程式設計
- 函式式思維和函數語言程式設計函式函數程式設計
- Scala函式與函數語言程式設計函式函數程式設計
- Python:函式解釋(程式導向)Python函式
- python函式程式設計 返回函式 匿名函式 裝飾器 偏函式Python函式程式設計
- SAP ABAP 函式總結 常用函式解釋函式
- 【譯】JavaScript中純函式是什麼JavaScript函式
- 通俗易懂的解釋:什麼是APIAPI
- Java中的七種函式程式設計技術 - foojayJava函式程式設計
- 函式設計函式
- JavaScript 中的函數語言程式設計:函式,組合和柯里化JavaScript函數程式設計函式
- C#中解構函式,Close函式,Dispose函式的區別C#函式
- 伺服器程式設計——函式splice實現零拷貝使用解釋伺服器程式設計函式
- python中upper函式的用法是什麼?Python函式
- Linux/Unix C程式設計之的perror函式,strerror函式,errnoLinuxC程式程式設計Error函式
- C++之類解構函式為什麼是虛擬函式C++函式