def sequence(operation, start, n, term):
return reduce(operation, map(term, range(start, n+1)))
Python の range 関数は半開きです。range(start, stop) は、start から stop-1 までの整数のリストを返します。たとえば、次のようになります。
>>> range(2,10)
[2,3,4,5,6,7,8,9]
したがって、問題を解決するには range(start, n+1) が必要です。
関数 "term" をこの範囲内の各整数に適用するには、組み込み関数マップを使用します。
>>> map(square,range(2,11))
[4, 9, 16, 25, 36, 49, 64, 81, 100]
関数の最後の部分には、組み込み関数 reduce が必要です。この関数は、関数、反復可能オブジェクト、およびオプションの初期値 (このインスタンスでは必要ありません) を引数として取ります。
reduce は、与えられた関数を iterable の最初の 2 つの要素に適用します。次に、最初の計算の結果と iterable の 3 番目の要素に関数を適用します。
たとえば、次のようになります。
>>> from operator import add
>>> reduce(add, [4, 9, 16, 25])
...は次と同等です:
>>> add( add( add(4, 9), 16), 25)
... と:
>>> reduce(add, [4, 9, 16, 25, 36, 49, 64, 81, 100])
...は次と同等です:
>>> add( add( add( add( add( add( add( add(4, 9), 16), 25), 36), 49), 64), 81), 100)