Upload
yoshiori-shoji
View
2.180
Download
5
Embed Size (px)
Citation preview
僕の見た関数型言語Yoshiori SHOJIfunction club
こんにちは!!ヨシオリです!!
æææææææææææææææææææææ%%%99%9%99%%999*,*ææææザッザッザ・・・æææææææææææææææææææææææ%%%99%9%%9%9%%%99%%999*,*æææザッザッザ・・・ææææææææææææææææææææææææ99%%%99%9%%9%9%999%%99%%999ææææææææææææææææææææææææ99%%9%9%99%%99%9%%9%9%999%%99%%999ææææææææææææææææææææææætwkwtuwkwtwkwtwøææææææææææææææææææææææKTttKtwtKTttKtwtKTttøæh_t_+h_からきますたæææææææææææææææææææΛœ´Õ−ÕΛœ´Õ−ÕΛœ´ÕΛœ´æææh_t_+h_からきますたæææ´œœΛæ´œœΛæ´œœΛæ´œœΛææææææææææææ朜*,ヘæ-–œæ-–œœ*,ヘæ-–œœ*,ヘæœ*,ヘææh_t_+h_からきますたææææ-›œœ]‹–æææ-›œœœ-›œœ]‹–æ]‹–æ-›œœ]‹–ææ‹%%%%%%æææ%%%%%%8888888›‹%%%%%%æææ%%%‹%%%%%%æææ%%%%%%8888888›ææ‹%%%%%%æææ%%%%%%8888888›æ,zÁ●Ë*æææÇÁ●ËÇ,8zÁ●Ë*æææzÁ●Ë*æææÇÁ●ËÇ,8zÇÁzÁ●Ë*æææÇÁ●ËÇ,8zææzææ**ß&Ç]*'–Ç**æ,8888zææ**ß&Ç]*'zææ**ß&Ç]*'–Ç**æ,8888z]*'zææ**ß&Ç]*'–Ç**æ,8888z,æzææÀ+;§;+%æ,8888888zææÀ+;§;zææÀ+;§;+%æ,8888888z§;zææÀ+;§;+%æ,8888888zææ›ææÀ§§´æ,88888‹›ææÀ§§æ›ææÀ§§´æ,88888‹§´›ææÀ§§´æ,88888‹æææ‹ÀŸ¤++¤¤⁄´›‹ÀŸ¤+æ‹ÀŸ¤++¤¤⁄´›+¤¤‹ÀŸ¤++¤¤⁄´›
関数型言語って何
関数型言語は、広い意味では
ファーストクラスの関数オブジェクトを持つ
言語である。wikipedia より
知ってる!!
これでしょ?>>> def foo(data):... print data... >>> foo<function foo at 0x6fa30>>>> _('hoge')hoge
Python
さすが Python!! Rubyに出来ない事を
(ry
紛争の原因になる記述の為削除しました。
ソレスタルビーイング
さらに!!
λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ
lambda もある!!
森田さんも Python で上司を説得すれば楽だったろうに……
でも!!
「文」な困ったちゃん•Python では代入が文
•ちょw (再)代入出来ないwwまぁ、関数型っぽくて良いか
• print が文
•ちょw デバッグ出来ねぇwwww
というか
•処理が続けて書けないw
• foo(); bar(); って文じゃんwwww
比較式• if 文とかで使うアレif( A && B ) とか if A and B
• A and B (&&)A を評価して真だったら B を評価
• A or B ( || )A を評価して偽だったら B を評価
irb(main):014:0> p 1 && 2 2=> nilirb(main):015:0> p 1 || 2 1=> nil
比較式
>>> print 1 and 22>>> print 1 or 21
これじゃね?
Python の真偽値Python では None、 False、
ゼロ(数値)、 空配列、空辞書、及びユーザ定義クラスで
__nonzero__() や __len__() が数値 zero または False を返す場合は
偽として扱われます。それ以外は真として扱われます。
foo() and bar()左辺が"真"だと右辺が実行される
式になった!!でも
左辺の評価結果が常に"真"にならないと困る
[ foo() ] and bar()[ ] で囲む事によって要素数 1 のリストになり
常に"真"になる
複数の処理を式に
[ foo() ] and [ bar() ] if A else True2.5から三項演算子が出来たのでそれを使う
if 文を式にif A : foo() bar()
[A and [ foo() ] and [ bar() ]]
2.5以前は三項演算子が無かったので
if 文を式に(2)[[ foo() ] and [ bar() ] if A else True ]
これ自体も[ ] で囲む事によって常に"真"になる
Python にはリスト内包表記が有る!!
for文を式に
for x in range(10) : foo( x )
[ foo( x ) for x in range(10) ]
def hoge( data ): return [foo()] and bar( data )最初に return 書けば最後に評価した値が返る
関数の返り値
lambda 化hoge = lambda data :([foo()] and bar( data ) )
tipsimport sys;[sys.stdout.write(data)]print 文は
代入はリストの append や辞書の__setitem__を使用する。グローバルな名前空間globals()、ローカルの名前空間locals()、そしてオブジェクトxの名前空間x.__dict__
globals().__setitem__("setitem", globals().__setitem__)
で
実際にやってみた(pit編)
しかも!!
式だからPythonなのに
フリーレイアウト!!
oneliner も出来ます!!(というか oneliner の
知識です><) Pythonでワンライナーを作成する際のノウハウ集http://www.nishiohirokazu.org/blog/2006/08/python_12.html
関数型言語の話しをしていたはずなのに
気がついたらonelinerの話しになってた。
何を言っているのか(ry
おわりJava Expert #03 にJython の記事書きました><11/15くらいに発売なのでよろしくおねがいします><