作者: Atsuo Ishimoto
日時: 2002/5/16(00:47)
石本です。

On Wed, 15 May 2002 22:26:13 +0900
"Naomasa Numajiri" <naonuma@...> wrote:

> 個人的に
>     map(func1,map(func0,list))
>     <=> map(func1*func0,list)
> となるようなfunc0,func1を作れやしないかとself.__call__や
> self.__mul__を使ったclassの定義に挑戦しましたがあきらめました。。。
> 

この手の関数型プログラミングをやってみようシリーズは、だいぶ昔に
python-ml-jpで結構出ていたような気がします。カリー化もどきとか。

この場合のfunc0, func1はこんなのでどうでしょ?

class Func:
    def __init__(self, f=None):
        self.f = f

    def __mul__(self, r):
        return Func(lambda x, r=r: self(r(x)))

    def __call__(self, x):
        return self.f(x)

class Func0(Func):
    def __call__(self, x):
        return x*2


class Func1(Func):
    def __call__(self, x):
        return x*3

class Func2(Func):
    def __call__(self, x):
        return x*4

func0 = Func0()
func1 = Func1()
func2 = Func2()

print map(func0, [1,2,3])
print map(func1,map(func0,[1,2,3]))
print map(func2, map(func1,map(func0,[1,2,3])))
print map(func0,[1,2,3])
print map(func1*func0,[1,2,3])
print map(func2*func1*func0,[1,2,3])



--------------------------
Atsuo Ishimoto
ishimoto@...
Homepage:http://www.gembook.jp