石本です。
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