私は別の言語で関数オブジェクトやら高階関数やらを使ってようやく理解しました。