作者: MATSUI Fe2+ Tetsushi
日時: 2007/10/03(11:56)
Fe2+ です。

At Wed,  3 Oct 2007 08:34:52 +0900 (JST),
機械伯爵 wrote:
>  ……一発目で、話がいきなりズレましたね(汗)
> 
>  私は、「変数を使ってもわかりやすい」から始まって、「どんなタイプの
> プログラミングスタイルへ誘導したらよいか」という話題を振りたいための
> スケッチ(NHK言語講座で言うならスキット)のつもりだったんですが……

ある意味、関数型プログラミングスタイルへの誘導なのでは。

>  一応、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)

ちゃちゃですが、reduce に渡しているシーケンスで初期値と関数という異質な
ものが並んでいるのは気持ち悪いので、初期値は reduce の第3引数に渡した方
が良いと思います。

上の例を見て(使い捨て)階乗関数を(無意味に)経由してみた例
(Python 2.4以上(py3k では print,reduce に注意)):
print (lambda n: (reduce(lambda v, f: f(v),
                         ((lambda v: v * i) for i in range(2, n + 1)),
                         1)))(6)
# Haskell まであと一歩(なのかな?)
-- 
MATSUI "Fe2+" Tetsushi