機械す。
> ジャアクな回答ですので使用禁止 :)
……一発目で、話がいきなりズレましたね(汗)
私は、「変数を使ってもわかりやすい」から始まって、「どんなタイプの
プログラミングスタイルへ誘導したらよいか」という話題を振りたいための
スケッチ(NHK言語講座で言うならスキット)のつもりだったんですが……
いや、わかっててやってるんでしょうけどね(泣)
> def f0(v): return v*2
> def f1(v): return v*3
> def f2(v): return v*4
> def f3(v): return v*5
> def f4(v): return v*6
>
> print reduce(lambda v, f: f(v), [1, f0, f1, f2, f3, f4])
一応、py3k版(+プチ改良)を。
from functools import reduce
ans = reduce(lambda v, f: f(v),(
1,
lambda v: v * 2,
lambda v: v * 3,
lambda v: v * 4,
lambda v: v * 5,
lambda v: v * 6))
print(ans)
Pythonではdef文は関数定義、lambda式によって出来る関数は無名関数、と
言ってますが、λ式(値としてではない式自身)をオブジェクトとして記述
したいなら、実はlambda表記のほうが直感的じゃないか、と、このごろ思った
りします(一つの式しか表記できないので)
逆にdef文は、戻り値も設定できる手続き(procedure)という雰囲気ですね。
> Ruby版
puts [
proc{|v| v*2},
proc{|v| v*3},
proc{|v| v*4},
proc{|v| v*5},
proc{|v| v*6},
].inject(1){|r, f| r = f.call(r)}
(↑主に、私が理解するために、改行を入れさせていただきました)
RubyはSmalltalkみたいにプロシージャブロックが作れますし、メソッド適用
もしやすいですから、Smalltalkっぽくコードを書くには、Rubyを使った方が
いいかもしれませんね(書いたコードの通り、PythonでSmalltalkスタイルは
無理ありすぎ……)
逆にSchemeみたいな「全部オブジェクト」な言語にスイッチを考えるなら、
Pythonのほうがわかりやすいかも。
/機械伯爵/