2005-08-03から1日間の記事一覧

事例:Collection.iterate

OCL で規定された iterate 操作 *1 に準拠した機能を実現します。 class OCL_Sequence: def __init__(self, items): self.items = items def iterate(self, f, acc): for e in self.items: acc = apply(f, (e, acc)) return acc >>> OCL_Sequence(range(10))…

さまざまな事例

いくつかの簡単な適用事例を使って、組み込み関数 reduce の理解を深めます。 《Note》〈第0版〉Smalltalk-80 セミナーで提示した、アドリブ課題からの抜粋です。受講者のみなさんが、その理解度を自己確認できるようにと、セミナーの最中に作成したものを、…

事例:入れ子になったリストを平坦化する

平坦化したリストが得られます *1。 def asSequence(s): if isinstance(s, list): return reduce(lambda acc,c: acc+asSequence(c), s, ) else: return [s] def flatten(s): return reduce(lambda acc,c: acc+asSequence(c), s, ) >>> s = [1,[2,3],[4,[5,6]…

事例:文字列を連結する

その順序を逆にした文字列が得られます。 >>> s = "ABC" >>> reduce(lambda acc,e: e+acc, s, "") 'CBA' これは、式 (("C")+"B")+"A" を評価したのと同じ結果になります。 acc e acc+e (1) "" "A" "A"+"" (2) "A" "B" "B"+"A" (3) "BA" "C" "C"+"BA" こうし…

《関連記事》

2008-05-19 ソースコードの歩き方《IronPython》reduce inject:into:/Smalltalk → Smalltalk use: better《26》これは要るけどこれは要らないかな iterate 演算/OCL → Java.use(better) NITRIS 問題《8》そして何度も繰り返す ハッシュ表 → Python.use(bette…

組み込み関数:reduce

まず、組み込み関数 reduce のヘルプ情報を確認します。 >>> help(reduce) Help on built-in function reduce in module __builtin__: reduce(...) reduce(function, sequence[, initial]) -> value Apply a function of two arguments cumulatively to the …

《こちらに引越中です》

Python.use(better, for=C#) 《記事一覧》 組み込み関数 reduce 《著》後藤いるか・森こねこ《監修》小泉ひよ子とタマゴ倶楽部第0版♪1988/03/30 ● 第1版♪2000/05/23 ● 更新♪2008/10/28

事例:総和を求める

1から5までの数の和/積が得られます。 >>> s = range(1,6); s [1, 2, 3, 4, 5] >>> reduce(lambda acc,e: acc+e, s, 0) 15 >>> reduce(lambda acc,e: acc*e, s, 1) 120 lambda 関数の第1引数 acc には、初期値として 0 が設定されます。第2引数 e は、リ…