為什麼這個函數的名字是reduce?

我的英語不好,我理解的reduce是減少的意思。但這個函數實現的功能我感覺和減少就沒有關係。所以請教該怎樣理解reduce?


reduce翻譯成規約,意思其他答案裡面已經講了。

實際上函數名不應取reduce,應該叫fold,而且要區分foldl和foldr左右兩個版本。並行計算裡面的那個reduce有個隱含前提,是reduce over monoid,所以結果才與reduce方向無關,可以做有效的並行化。


歸約

這是一個函數式編程裡面,高階函數裡面很基礎的概念。不過我最早聽到這個詞是在並行計算裡面。

函數式編程裡面有時也稱作 fold ,也就是摺疊,這個更好理解吧。詳情可參見wikipedia,裡面提到了 In functional programming, fold – also known variously as reduce, accumulate, aggregate, compress, or inject

你找一個你覺得好理解的詞就OK了。


這就是MapReduce中的reduce,也叫fold。

wikipedia鏈接:Fold (higher-order function)

SICP中用scheme實現的叫accumulate。

C++中是std::accumulate。

wiki中Folds in various languages部分講了各種語言中的這個函數的叫法。


reduce 在這裡應該翻譯成「歸納」。


reduce在函數式語言里就是要減少的意思,要合併結果,多項變成一項。至於怎麼合併,就看reduce的函數是什麼。

range得到一個collection(或sequence),裡面有多項。reduce函數是add,結果是一項。

當然reduce後也可以還是一個collection,那是因為把collection整體看做一項結果。


別糾結了,這個函數如此難懂,完全不符合python的風格,以致於在python3中被刪除了。

題主還是趁早改邪歸正,拋棄python2,投入python3的陣營吧!


....

reduce 很多項成一項啊。這個很難理解么?


推薦閱讀:

化工男悉尼留學移民雅思考試4個7分虐心經歷和雅思高分經驗分享(從5.5到8.5)?
雅思高分經驗分享?
把boy拼成boi是不是很娘的做法?
從語言學上分析,英語可不可以漢字化?

TAG:編程語言 | Python | 英語 | 編程 |