hof - Higher-Order Functions

hof モジュールは、あると便利かもしれない高階関数をたかだか9個ほど集めたモジュールです。 Python版と無駄にCで実装した拡張モジュール版があります。 hofモジュールをインポートすると、拡張モジュールがあればそれを、なければPython版のモジュールをインポートします。

import hof    # 拡張モジュールかPythonモジュールをインポート
import hof_c  # 拡張モジュールを直接インポート
import hof_py # Pythonモジュールを直接インポート

拡張モジュールのほうが15-70%ほど高速ですが、コードは700%ほど膨れました。

モジュール関数

いずれも最初の引数は関数、二つ目はシーケンス型です。

find(f, seq)
関数をシーケンスの各要素に順に適用し、戻り値が真である最初の要素を返します。 すべての戻り値が偽であれば、例外LookupErrorを発生します。
find_index(f, seq)
関数をシーケンスの各要素に順に適用し、戻り値が真である最初の要素のインデックスを返します。 すべての戻り値が偽であれば、例外LookupErrorを発生します。
find_indices(f, seq)
関数をシーケンスの各要素に適用し、戻り値が真であるすべての要素のインデックスからなるリストを返します。
all(f, seq)
関数をシーケンスの各要素に適用し、すべての戻り値が真であれば真を返します。
any(f, seq)
関数をシーケンスの各要素に適用し、戻り値が一つでも真であれば真を返します。
take(f, seq)
関数をシーケンスの各要素に適用し、真の戻り値が続く間の要素からなるリストを返します。
take(lambda x: x < 3, [0,1,2,3,4,5]) #=> [0,1,2]
drop(f, seq)
take(f, seq) の残りの要素からなるリストを返します。
drop(lambda x: x < 3, [0,1,2,3,4,5]) #=> [3,4,5]
span(f, seq)
take(f, seq)drop(f, seq) からなるタプルを返します。
span(lambda x: x < 3, [0,1,2,3,4,5]) #=> ([0,1,2], [3,4,5])
partition(f, seq)
関数をシーケンスの各要素に適用し、戻り値が真の要素と偽の要素をまとめた二つのリストからなるタプルを返します。
partition(lambda x: x % 2 == 0, [0,1,2,3,4,5]) #=> ([0,2,4], [1,3,5])