僕のみた関数型言語
-
Upload
yoshiori-shoji -
Category
Documents
-
view
2.180 -
download
5
Transcript of 僕のみた関数型言語
![Page 1: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/1.jpg)
僕の見た関数型言語Yoshiori SHOJIfunction club
![Page 2: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/2.jpg)
こんにちは!!ヨシオリです!!
![Page 3: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/3.jpg)
æææææææææææææææææææææ%%%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: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/4.jpg)
関数型言語って何
![Page 5: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/5.jpg)
関数型言語は、広い意味では
ファーストクラスの関数オブジェクトを持つ
言語である。wikipedia より
![Page 6: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/6.jpg)
知ってる!!
![Page 7: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/7.jpg)
これでしょ?>>> def foo(data):... print data... >>> foo<function foo at 0x6fa30>>>> _('hoge')hoge
Python
![Page 8: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/8.jpg)
さすが Python!! Rubyに出来ない事を
(ry
紛争の原因になる記述の為削除しました。
ソレスタルビーイング
![Page 9: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/9.jpg)
さらに!!
![Page 10: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/10.jpg)
λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ
lambda もある!!
![Page 11: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/11.jpg)
森田さんも Python で上司を説得すれば楽だったろうに……
![Page 12: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/12.jpg)
でも!!
![Page 13: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/13.jpg)
![Page 14: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/14.jpg)
「文」な困ったちゃん•Python では代入が文
•ちょw (再)代入出来ないwwまぁ、関数型っぽくて良いか
• print が文
•ちょw デバッグ出来ねぇwwww
![Page 15: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/15.jpg)
というか
•処理が続けて書けないw
• foo(); bar(); って文じゃんwwww
![Page 16: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/16.jpg)
![Page 17: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/17.jpg)
比較式• if 文とかで使うアレif( A && B ) とか if A and B
• A and B (&&)A を評価して真だったら B を評価
• A or B ( || )A を評価して偽だったら B を評価
![Page 18: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/18.jpg)
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: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/19.jpg)
Python の真偽値Python では None、 False、
ゼロ(数値)、 空配列、空辞書、及びユーザ定義クラスで
__nonzero__() や __len__() が数値 zero または False を返す場合は
偽として扱われます。それ以外は真として扱われます。
![Page 20: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/20.jpg)
foo() and bar()左辺が"真"だと右辺が実行される
式になった!!でも
左辺の評価結果が常に"真"にならないと困る
[ foo() ] and bar()[ ] で囲む事によって要素数 1 のリストになり
常に"真"になる
複数の処理を式に
![Page 21: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/21.jpg)
[ foo() ] and [ bar() ] if A else True2.5から三項演算子が出来たのでそれを使う
if 文を式にif A : foo() bar()
![Page 22: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/22.jpg)
[A and [ foo() ] and [ bar() ]]
2.5以前は三項演算子が無かったので
if 文を式に(2)[[ foo() ] and [ bar() ] if A else True ]
これ自体も[ ] で囲む事によって常に"真"になる
![Page 23: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/23.jpg)
Python にはリスト内包表記が有る!!
for文を式に
for x in range(10) : foo( x )
[ foo( x ) for x in range(10) ]
![Page 24: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/24.jpg)
def hoge( data ): return [foo()] and bar( data )最初に return 書けば最後に評価した値が返る
関数の返り値
lambda 化hoge = lambda data :([foo()] and bar( data ) )
![Page 25: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/25.jpg)
tipsimport sys;[sys.stdout.write(data)]print 文は
代入はリストの append や辞書の__setitem__を使用する。グローバルな名前空間globals()、ローカルの名前空間locals()、そしてオブジェクトxの名前空間x.__dict__
globals().__setitem__("setitem", globals().__setitem__)
![Page 26: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/26.jpg)
![Page 27: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/27.jpg)
で
![Page 28: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/28.jpg)
実際にやってみた(pit編)
![Page 29: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/29.jpg)
しかも!!
![Page 30: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/30.jpg)
式だからPythonなのに
フリーレイアウト!!
![Page 31: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/31.jpg)
oneliner も出来ます!!(というか oneliner の
知識です><) Pythonでワンライナーを作成する際のノウハウ集http://www.nishiohirokazu.org/blog/2006/08/python_12.html
![Page 32: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/32.jpg)
関数型言語の話しをしていたはずなのに
気がついたらonelinerの話しになってた。
何を言っているのか(ry
![Page 33: 僕のみた関数型言語](https://reader034.fdocuments.net/reader034/viewer/2022042815/5585563dd8b42a2d498b4f05/html5/thumbnails/33.jpg)
おわりJava Expert #03 にJython の記事書きました><11/15くらいに発売なのでよろしくおねがいします><