33
僕の見た関数型言語 Yoshiori SHOJI function club

僕のみた関数型言語

Embed Size (px)

Citation preview

Page 1: 僕のみた関数型言語

僕の見た関数型言語Yoshiori SHOJIfunction club

Page 2: 僕のみた関数型言語

こんにちは!!ヨシオリです!!

Page 3: 僕のみた関数型言語

æææææææææææææææææææææ%%%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‹æææ‹ÀŸ¤++¤¤⁄´›‹ÀŸ¤+æ‹ÀŸ¤++¤¤⁄´›+¤¤‹ÀŸ¤++¤¤⁄´›

Page 4: 僕のみた関数型言語

関数型言語って何

Page 5: 僕のみた関数型言語

関数型言語は、広い意味では

ファーストクラスの関数オブジェクトを持つ

言語である。wikipedia より

Page 6: 僕のみた関数型言語

知ってる!!

Page 7: 僕のみた関数型言語

これでしょ?>>> def foo(data):... print data... >>> foo<function foo at 0x6fa30>>>> _('hoge')hoge

Python

Page 8: 僕のみた関数型言語

さすが Python!! Rubyに出来ない事を

(ry

紛争の原因になる記述の為削除しました。

ソレスタルビーイング

Page 9: 僕のみた関数型言語

さらに!!

Page 10: 僕のみた関数型言語

λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ

lambda もある!!

Page 11: 僕のみた関数型言語

森田さんも Python で上司を説得すれば楽だったろうに……

Page 12: 僕のみた関数型言語

でも!!

Page 13: 僕のみた関数型言語
Page 14: 僕のみた関数型言語

「文」な困ったちゃん•Python では代入が文

•ちょw (再)代入出来ないwwまぁ、関数型っぽくて良いか

• print が文

•ちょw デバッグ出来ねぇwwww

Page 15: 僕のみた関数型言語

というか

•処理が続けて書けないw

• foo(); bar(); って文じゃんwwww

Page 16: 僕のみた関数型言語
Page 17: 僕のみた関数型言語

比較式• if 文とかで使うアレif( A && B ) とか if A and B

• A and B (&&)A を評価して真だったら B を評価

• A or B ( || )A を評価して偽だったら B を評価

Page 18: 僕のみた関数型言語

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

これじゃね?

Page 19: 僕のみた関数型言語

Python の真偽値Python では None、 False、

ゼロ(数値)、 空配列、空辞書、及びユーザ定義クラスで

__nonzero__() や __len__() が数値 zero または False を返す場合は

偽として扱われます。それ以外は真として扱われます。

Page 20: 僕のみた関数型言語

foo() and bar()左辺が"真"だと右辺が実行される

式になった!!でも

左辺の評価結果が常に"真"にならないと困る

[ foo() ] and bar()[ ] で囲む事によって要素数 1 のリストになり

常に"真"になる

複数の処理を式に

Page 21: 僕のみた関数型言語

[ foo() ] and [ bar() ] if A else True2.5から三項演算子が出来たのでそれを使う

if 文を式にif A : foo() bar()

Page 22: 僕のみた関数型言語

[A and [ foo() ] and [ bar() ]]

2.5以前は三項演算子が無かったので

if 文を式に(2)[[ foo() ] and [ bar() ] if A else True ]

これ自体も[ ] で囲む事によって常に"真"になる

Page 23: 僕のみた関数型言語

Python にはリスト内包表記が有る!!

for文を式に

for x in range(10) : foo( x )

[ foo( x ) for x in range(10) ]

Page 24: 僕のみた関数型言語

def hoge( data ): return [foo()] and bar( data )最初に return 書けば最後に評価した値が返る

関数の返り値

lambda 化hoge = lambda data :([foo()] and bar( data ) )

Page 25: 僕のみた関数型言語

tipsimport sys;[sys.stdout.write(data)]print 文は

代入はリストの append や辞書の__setitem__を使用する。グローバルな名前空間globals()、ローカルの名前空間locals()、そしてオブジェクトxの名前空間x.__dict__

globals().__setitem__("setitem", globals().__setitem__)

Page 26: 僕のみた関数型言語
Page 27: 僕のみた関数型言語

Page 28: 僕のみた関数型言語

実際にやってみた(pit編)

Page 29: 僕のみた関数型言語

しかも!!

Page 30: 僕のみた関数型言語

式だからPythonなのに

フリーレイアウト!!

Page 31: 僕のみた関数型言語

oneliner も出来ます!!(というか oneliner の

知識です><) Pythonでワンライナーを作成する際のノウハウ集http://www.nishiohirokazu.org/blog/2006/08/python_12.html

Page 32: 僕のみた関数型言語

関数型言語の話しをしていたはずなのに

気がついたらonelinerの話しになってた。

何を言っているのか(ry

Page 33: 僕のみた関数型言語

おわりJava Expert #03 にJython の記事書きました><11/15くらいに発売なのでよろしくおねがいします><