通俗解釋什麼函式程式設計中的函子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函數程式設計函式
- Java中的函數語言程式設計(二)函式式介面Functional InterfaceJava函數程式設計函式Function
- Shell程式設計-09-Shell中的函式程式設計函式
- Scala 函數語言程式設計(一) 什麼是函數語言程式設計?函數程式設計
- Python:函式解釋(程式導向)Python函式
- 理解函數語言程式設計中的函式組合--Monoids(二)函數程式設計函式Mono
- python函式程式設計 返回函式 匿名函式 裝飾器 偏函式Python函式程式設計
- select函式socket程式設計函式程式設計
- JS函數語言程式設計概念理解:函子(Functor)JS函數程式設計
- Python函數語言程式設計-高階函式、匿名函式、裝飾器、偏函式Python函數程式設計函式
- 子父類中函式函式
- 函式設計函式
- javascript函子是什麼JavaScript
- Python 函數語言程式設計 – 高階函式Python函數程式設計函式
- Python函數語言程式設計自帶函式Python函數程式設計函式
- 不用任何賦值的程式設計稱為*函式式*程式設計賦值程式設計函式
- Java中的函式程式設計技術 - Deepu K SasidharanJava函式程式設計
- Java中的七種函式程式設計技術 - foojayJava函式程式設計
- JavaScript 中的函數語言程式設計:函式,組合和柯里化JavaScript函數程式設計函式
- Bash程式設計007——函式(一)程式設計函式
- JS 命令式 宣告式 函式式 程式設計?JS函式程式設計
- python中upper函式的用法是什麼?Python函式
- 函式響應式程式設計與RxSwift函式程式設計Swift
- Day 14 匿名函式 內建函式 物件導向程式設計函式物件程式設計
- 什麼是Python函式?如何定義函式?Python函式
- JavaScript函數語言程式設計(純函式、柯里化以及組合函式)JavaScript函數程式設計函式
- 函數語言程式設計-鏈式程式設計RAC函數程式設計
- C++之類解構函式為什麼是虛擬函式C++函式
- Java中的函數語言程式設計(三)lambda表示式Java函數程式設計
- Lambda表示式入門--函數語言程式設計與函式式介面函數程式設計函式
- 【譯】JavaScript中純函式是什麼JavaScript函式
- 為什麼 Python 程式碼在函式中執行得更快?Python函式
- Ardunio和HAL庫函式程式設計函式程式設計
- 執行緒join為什麼在解構函式中執行緒函式
- 通俗易懂的解釋:什麼是APIAPI