作者: Bruce.
日時: 2007/10/3(12:20)
Bruce.です。

MATSUI Fe2+ Tetsushi writes:

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

うい、むしゅー。
#Haskellの壁は高い


> >  一応、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引数に渡した方
> が良いと思います。

まず機械さんあてに。reduceで適用する関数群にlambdaを使わなかったのはわざと
ですので、そこを「改良」とか云われると背中がむずがゆいです。
あと、この場合にタプルとリストとで何か変わるのでしょうか?

んで、Fe2+さん指摘の点はそのとおりだと思います。
#1を返す関数とか作ろうかとも思ったのですが :)
ただ、一応確認してから使ったのですが、reduce は redece(func, seq) に
と出ていたので三引数にできるとは知りませんでした。

5. データ構造
http://www.python.jp/doc/2.4/tut/node7.html

#That's イイワケ


> 上の例を見て(使い捨て)階乗関数を(無意味に)経由してみた例
> (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 まであと一歩(なのかな?)


ああ、これはやろうとして自重していたのに :)
#ジェネレータ大好き野郎

いじょ。