ラムダ式


ラムダ式はC#にも有るが面倒なので放置してあった。
Pythonを学ぶにあたって少し突っ込んで調べてみた。

Wikiによると
例えば、ある数に 2 を加える関数 f() を考える。
これは通常の書き方では f(x) = x + 2 と書くことができるだろう。
この関数 f は、ラムダ計算の式(ラムダ式という)では \x. x + 2 と書かれる。
変数 x の名前は重要ではなく、 \y. y + 2 と書いても同じである。
同様に、この関数に 3 を適用した結果の数 f(3) は (\x. x + 2) 3 と書かれる。
関数の適用は左結合である。
とある。

さて、これをPythonで書いてみると。
普通の関数の場合は

def f(x):
 return x + 2

普通の関数呼び出し
print f(2)  #4を出力する


これをラムダ式で書くと
f = lambda x:x + 2
print f(2) #4を出力する


(lambda 変数:数式)(代入の値)
と書けるので上の式は
print (lambda x:x + 2)(3)    #4を出力する
と書ける。

そしてこれは式なのでコードの中に埋め込みで書けるのだ。

変数が複数の場合は
f=lambda x,y,z:x + y + z
print f(1,2,3) 
更にこれは
print(lambda x,y,z:x+y+z)(1,2,3)
書くことが出来る。

これは関数にすると
def f(x,y,z):
return (x + y + z)

をf(1,2,3)として呼び出したことになる。

このラムダ式を使うと、関数を作らなくても、数式を
計算式などの中に埋め込めると言うのである。

  


2011年05月12日 Posted by igoten at 11:58Comments(0)Python

メダカとスネイル



連休中にメダカたちを冬用の発泡スチロール
の入れ物から、水槽に移した。

真冬には水深が4cm位のところに1.5cmあまりの
氷が張っていたが、氷の下でメダカたちは元気に生きていた。

メダカには2種類あって、昨年生まれの子メダカとその親メダカである。
親メダカは全部で10匹程度居たのだが、全て冬を生き延びたように見えた。
ところがなんと春になって2匹死んでしまったのだ。

「せっかく信州の厳しい冬を生き残ったのにもったいないでは無いか」
と死んだメダカに言ってみる、どうにもならないけど。

人間も同じで少しくらい生きる環境が厳しい方が頑張って生きるのかも
知れない。

昨年の夏に生まれた子メダカたちも元気で生き残っている。
ただし殆ど成長していない、大きさが昨年の秋と殆ど変らないのだ。
寒いと大きくなれないのだろう。
夏までに大きくなるのだろうか。

メダカの水槽に寄生しているスネイル(貝の一種)は
冬でも卵を産んで増えていた。
もともとこのスネイルはホームセンタで購入した水草に
寄生していたもので爆発的に増えるのだが、多分メダカもこの卵を
食べていると思われるのでそのままにしていた。
しかしあまりにも繁殖しすぎるので、メダカを水槽に入れるにあたって、
大きなスネイルは取り除いて川に流した。

昔は我が家の近くの田んぼには沢山タニシが居たのだが最近は
殆ど見なくなった。
スネイル君たちも田んぼの中ならかなり増えても問題ないと
思うのだが。

これから夏に向かってまた昨年と同じようにグリーンコロニーが出来るのだろう。
  

2011年05月12日 Posted by igoten at 08:18Comments(4)その他