Suche senden
Hochladen
Currying in perl
•
0 gefällt mir
•
3,144 views
Masahiro Honma
Folgen
http://www.slideshare.net/hiratara/hokkaidopm-17020206 の本物の方。
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 34
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。
Hishikawa Takuro
PHP foreachでの参照渡しに潜む罠
PHP foreachでの参照渡しに潜む罠
Takaaki Hirano
CakePHPで開発する時に統一しておきたいコーディング内容(080316)
CakePHPで開発する時に統一しておきたいコーディング内容(080316)
柴田 篤志
実用裏方 Perl 入門
実用裏方 Perl 入門
keroyonn
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
leverages_event
大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向
azuma satoshi
Perlで伝統芸能
Perlで伝統芸能
hitode909
Empfohlen
俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。
Hishikawa Takuro
PHP foreachでの参照渡しに潜む罠
PHP foreachでの参照渡しに潜む罠
Takaaki Hirano
CakePHPで開発する時に統一しておきたいコーディング内容(080316)
CakePHPで開発する時に統一しておきたいコーディング内容(080316)
柴田 篤志
実用裏方 Perl 入門
実用裏方 Perl 入門
keroyonn
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
leverages_event
大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向
azuma satoshi
Perlで伝統芸能
Perlで伝統芸能
hitode909
Nambapm_napthats
Nambapm_napthats
napthats
Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104
Satoshi Suzuki
知って得する標準関数の使い方
知って得する標準関数の使い方
Soudai Sone
WordPress のキャッシュ機構
WordPress のキャッシュ機構
katanyan
Perl 6 Object-Oliented Programming
Perl 6 Object-Oliented Programming
risou
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
Jun Nogata
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
Yusuke Ando
Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半
Joe_noh
"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6
risou
Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半
Joe_noh
Zend Db Table拡張説明資料
Zend Db Table拡張説明資料
co-hey japan
WordPress関数の処理コストを考えよう
WordPress関数の処理コストを考えよう
Naoki Matsuda
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104
Satoshi Suzuki
Elixirだ 第2回
Elixirだ 第2回
Joe_noh
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -
Joe_noh
すごいHaskell読書会#10
すごいHaskell読書会#10
Shin Ise
もにかじ2 lt @studio3104
もにかじ2 lt @studio3104
Satoshi Suzuki
2014経営分析論Ⅱ⑨
2014経営分析論Ⅱ⑨
Tsutomu TOBITA
Asset Pipeline for Perl
Asset Pipeline for Perl
Yoshihiro Sasaki
理解したつもりになるGit入門
理解したつもりになるGit入門
Yoshihiro Sasaki
Use Carton
Use Carton
Yoshihiro Sasaki
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
Ryosuke IWANAGA
Weitere ähnliche Inhalte
Was ist angesagt?
Nambapm_napthats
Nambapm_napthats
napthats
Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104
Satoshi Suzuki
知って得する標準関数の使い方
知って得する標準関数の使い方
Soudai Sone
WordPress のキャッシュ機構
WordPress のキャッシュ機構
katanyan
Perl 6 Object-Oliented Programming
Perl 6 Object-Oliented Programming
risou
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
Jun Nogata
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
Yusuke Ando
Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半
Joe_noh
"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6
risou
Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半
Joe_noh
Zend Db Table拡張説明資料
Zend Db Table拡張説明資料
co-hey japan
WordPress関数の処理コストを考えよう
WordPress関数の処理コストを考えよう
Naoki Matsuda
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104
Satoshi Suzuki
Elixirだ 第2回
Elixirだ 第2回
Joe_noh
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -
Joe_noh
すごいHaskell読書会#10
すごいHaskell読書会#10
Shin Ise
もにかじ2 lt @studio3104
もにかじ2 lt @studio3104
Satoshi Suzuki
2014経営分析論Ⅱ⑨
2014経営分析論Ⅱ⑨
Tsutomu TOBITA
Was ist angesagt?
(18)
Nambapm_napthats
Nambapm_napthats
Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104
知って得する標準関数の使い方
知って得する標準関数の使い方
WordPress のキャッシュ機構
WordPress のキャッシュ機構
Perl 6 Object-Oliented Programming
Perl 6 Object-Oliented Programming
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半
"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6
Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半
Zend Db Table拡張説明資料
Zend Db Table拡張説明資料
WordPress関数の処理コストを考えよう
WordPress関数の処理コストを考えよう
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104
Elixirだ 第2回
Elixirだ 第2回
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -
すごいHaskell読書会#10
すごいHaskell読書会#10
もにかじ2 lt @studio3104
もにかじ2 lt @studio3104
2014経営分析論Ⅱ⑨
2014経営分析論Ⅱ⑨
Andere mochten auch
Asset Pipeline for Perl
Asset Pipeline for Perl
Yoshihiro Sasaki
理解したつもりになるGit入門
理解したつもりになるGit入門
Yoshihiro Sasaki
Use Carton
Use Carton
Yoshihiro Sasaki
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
Ryosuke IWANAGA
Google trends to_irc
Google trends to_irc
rarere
Takao.mt 2013
Takao.mt 2013
moznion
テーマ「最適化」
テーマ「最適化」
technocat
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
goccy
YAPC::AsiaとHokkaido.pm
YAPC::AsiaとHokkaido.pm
Yoshihiro Sasaki
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
moznion
PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416
Yoshihiro Sasaki
テーマ「なんでもないようなこと」
テーマ「なんでもないようなこと」
technocat
Games::* - Perlで 「ゲーム」しよう #hokkaidopm
Games::* - Perlで 「ゲーム」しよう #hokkaidopm
鉄次 尾形
Using Dancer
Using Dancer
Yoshihiro Sasaki
YAPCレポートの舞台裏
YAPCレポートの舞台裏
Masahiro Honma
Plack::Request with Encoding
Plack::Request with Encoding
moznion
CPAN/便利モジュール
CPAN/便利モジュール
Yoshihiro Sasaki
変数、リファレンス
変数、リファレンス
charsbar
Perl 非同期プログラミング
Perl 非同期プログラミング
lestrrat
cpanfile
cpanfile
Yoshihiro Sasaki
Andere mochten auch
(20)
Asset Pipeline for Perl
Asset Pipeline for Perl
理解したつもりになるGit入門
理解したつもりになるGit入門
Use Carton
Use Carton
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
Google trends to_irc
Google trends to_irc
Takao.mt 2013
Takao.mt 2013
テーマ「最適化」
テーマ「最適化」
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
YAPC::AsiaとHokkaido.pm
YAPC::AsiaとHokkaido.pm
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416
テーマ「なんでもないようなこと」
テーマ「なんでもないようなこと」
Games::* - Perlで 「ゲーム」しよう #hokkaidopm
Games::* - Perlで 「ゲーム」しよう #hokkaidopm
Using Dancer
Using Dancer
YAPCレポートの舞台裏
YAPCレポートの舞台裏
Plack::Request with Encoding
Plack::Request with Encoding
CPAN/便利モジュール
CPAN/便利モジュール
変数、リファレンス
変数、リファレンス
Perl 非同期プログラミング
Perl 非同期プログラミング
cpanfile
cpanfile
Ähnlich wie Currying in perl
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
norry_gogo
詳説ぺちぺち
詳説ぺちぺち
do_aki
PHP7を魔改造した話
PHP7を魔改造した話
Moriyoshi Koizumi
Cinnamon - simple deploy tool
Cinnamon - simple deploy tool
Yuki Shibazaki
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
Wataru Terada
Data munging
Data munging
Hiroyuki Taira
Ähnlich wie Currying in perl
(7)
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
詳説ぺちぺち
詳説ぺちぺち
PHP7を魔改造した話
PHP7を魔改造した話
Cinnamon - simple deploy tool
Cinnamon - simple deploy tool
Ekmett勉強会発表資料
Ekmett勉強会発表資料
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
Data munging
Data munging
Mehr von Masahiro Honma
レンズ (ぶつかり稽古の没プレゼン)
レンズ (ぶつかり稽古の没プレゼン)
Masahiro Honma
すべてが@__kanになる
すべてが@__kanになる
Masahiro Honma
Types and perl language
Types and perl language
Masahiro Honma
カレーとHokkaidopm
カレーとHokkaidopm
Masahiro Honma
モナモナ言うモナド入門.tar.gz
モナモナ言うモナド入門.tar.gz
Masahiro Honma
モナモナ言うモナド入門
モナモナ言うモナド入門
Masahiro Honma
Perl saved a lady.
Perl saved a lady.
Masahiro Honma
Levenshtein Automata
Levenshtein Automata
Masahiro Honma
20120526 hachioji.pm
20120526 hachioji.pm
Masahiro Honma
循環参照のはなし
循環参照のはなし
Masahiro Honma
Arrows in perl
Arrows in perl
Masahiro Honma
Hachioji.pm in Machida の LT
Hachioji.pm in Machida の LT
Masahiro Honma
Monads in perl
Monads in perl
Masahiro Honma
ウヰスキーとPSGI
ウヰスキーとPSGI
Masahiro Honma
モデルから知るGit
モデルから知るGit
Masahiro Honma
Git入門
Git入門
Masahiro Honma
AnyEvent and Plack
AnyEvent and Plack
Masahiro Honma
Math::Category
Math::Category
Masahiro Honma
Stateモナドの解説 後編
Stateモナドの解説 後編
Masahiro Honma
Stateモナドの解説 中編
Stateモナドの解説 中編
Masahiro Honma
Mehr von Masahiro Honma
(20)
レンズ (ぶつかり稽古の没プレゼン)
レンズ (ぶつかり稽古の没プレゼン)
すべてが@__kanになる
すべてが@__kanになる
Types and perl language
Types and perl language
カレーとHokkaidopm
カレーとHokkaidopm
モナモナ言うモナド入門.tar.gz
モナモナ言うモナド入門.tar.gz
モナモナ言うモナド入門
モナモナ言うモナド入門
Perl saved a lady.
Perl saved a lady.
Levenshtein Automata
Levenshtein Automata
20120526 hachioji.pm
20120526 hachioji.pm
循環参照のはなし
循環参照のはなし
Arrows in perl
Arrows in perl
Hachioji.pm in Machida の LT
Hachioji.pm in Machida の LT
Monads in perl
Monads in perl
ウヰスキーとPSGI
ウヰスキーとPSGI
モデルから知るGit
モデルから知るGit
Git入門
Git入門
AnyEvent and Plack
AnyEvent and Plack
Math::Category
Math::Category
Stateモナドの解説 後編
Stateモナドの解説 後編
Stateモナドの解説 中編
Stateモナドの解説 中編
Kürzlich hochgeladen
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
Kürzlich hochgeladen
(10)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Currying in perl
1.
CurryとHokkaido.pm
2013.3.9 hiratara FreakOut
2.
初代ベスト エルティニスト賞
3.
“Hokkaido.pm Casual はじめました”
by techno_neko スープCurryが観客の心と胃袋をつかみ、初代ベス トエルティニスト賞となりました!おめでとうご ざいました! http://hachiojipm.org/?p=403
4.
“Hokkaido.pm Casual はじめました”
by techno_neko スープCurryが観客の心と胃袋をつかみ、初代ベス トエルティニスト賞となりました!おめでとうご ざいました! http://hachiojipm.org/?p=403
5.
Curryが
ウケるっぽい
6.
currying
7.
カリー化とは • A ×
B→Cの関数を、A→(B→C)にする • hoge($x, $y) みたいな関数を curried_hoge($x)($y) みたいにする
8.
カリー化と 部分適用は違うよ
9.
部分適用とは • A ×
B→Cの関数を、B→Cにする • hoge($x, $y) みたいな関数に3を適用して hoge_3($y) みたいにする
10.
誤用すると色々危ない
11.
curry関数の実装 sub curry {
my $f = shift; sub { my $x = shift; sub { $f->($x, @_) }; }; }
12.
再帰的にカリー化 • hoge($x, $y,
$z) みたいな関数は curried_hoge($x)($y, $z) じゃなく curried_hoge($x)($y)($z) みたいにしたい • A × B × C→D A→(B × C→D) A→(B→(C→D))
13.
curry_n関数の実装 sub curry_n {
my ($n, $f) = @_; $n <= 1 ? $f : sub { my $x = shift; my $fx = curry($f)->($x); curry_n($n - 1, $fx); }; }
14.
curry_n関数の実装 sub curry_n {
引数の個数が必要 my ($n, $f) = @_; $n <= 1 ? $f : sub { my $x = shift; my $fx = curry($f)->($x); curry_n($n - 1, $fx); }; }
15.
使い方 sub add {
$_[0] + $_[1] + $_[2] } my $x = (curry_n 3, &add)->(3)(4)(5);
16.
使い方 sub add {
$_[0] + $_[1] + $_[2] } まとめたい my $x = (curry_n 3, &add)->(3)(4)(5);
17.
カレーをカレーで食べる
18.
新しい関数を作る *curried_curry_n = curry_n(2,
&curry_n); *curry3 = curried_curry_n(3); my $x = curry3(&add)->(3)(4)(5);
19.
新しい関数を作る
curry_nは2引数関数 *curried_curry_n = curry_n(2, &curry_n); *curry3 = curried_curry_n(3); my $x = curry3(&add)->(3)(4)(5);
20.
新しい関数を作る
curry_nは2引数関数 *curried_curry_n = curry_n(2, &curry_n); *curry3 = curried_curry_n(3); 引数の数を部分適用して新しい関数にする my $x = curry3(&add)->(3)(4)(5);
21.
カリー化すると
部分適用しやすい *curry3 = curried_curry_n(3); *curry4 = curried_curry_n(4); *curry5 = curried_curry_n(5); *{“curry$_”} = curried_curry_n($_) for 3.. 10000000;
22.
ほんとに引数の数 ってわからないの?
23.
($$$)
24.
I ♡ function
prototyping
25.
プロトタイプを使う sub parse_proto ($)
{ my $f = shift; my $proto = prototype $f; $proto =~ /^([&_+*$]|[[$@%&*]+]|[$@ %&*])(.+)/ ? ($1, $2) : (undef, $proto); }
26.
プロトタイプを使う sub curry_proto_n ($)
{ my $f = shift; my ($p, $ps) = parse_proto $f; ! $p ? $f : eval qq/sub ($p) { my $x = shift; my $fx = sub ($ps) { $f->($x, @_) }; curry_proto_n $fx; }/; }
27.
プロトタイプを使う sub curry_proto_n ($)
{ my $f = shift; my ($p, $ps) = parse_proto $f; ! $p ? $f : eval qq/sub ($p) { my $x = shift; my $fx = sub ($ps) { $f->($x, @_) }; curry_proto_n $fx; }/; }
28.
使い方 sub add ($$$)
{ $_[0] + $_[1] + $_[2] } my $x = (curry_proto_n &add)->(3)(4)(5); BEGIN { *add10 = (curry_proto &add)->(10) } my $x = add10 3, 4;
29.
使い方 sub add ($$$)
{ $_[0] + $_[1] + $_[2] } my $x = (curry_proto_n &add)->(3)(4)(5); BEGIN { *add10 = (curry_proto &add)->(10) } my $x = add10 3, 4; かっこなくてもよい
30.
One more
function prototyping
31.
Pod::Functions % perl -MPod::Functions
-e 'eval { print $_, "t", +(prototype "CORE::$_"), "n" } for keys %Flavor' ... getgrgid $ connect *$ dbmopen %$$ link $$ rand ;$ dbmclose % msgsnd $$$ umask ;$ sleep ;$ seek *$$
32.
currying builtins use 5.16.2; my
$x = (curry_proto_n &CORE::substr)->("abcde")(1)(2); BEGIN { *substr_abcde = (curry_proto &CORE::substr)->("abcde"); } my $y = substr_abcde 1, 2;
33.
currying builtins use 5.16.2; my
$x = (curry_proto_n &CORE::substr)->("abcde")(1)(2); BEGIN { *substr_abcde = (curry_proto &CORE::substr)->("abcde"); } my $y = substr_abcde 1, 2; かっこなくてもよい
34.
まとめ • カリー化すると部分適用しやすい • &CORE::xxx
によりさらに便利に • プロトタイプ使うと隣の同僚に DISられる
Jetzt herunterladen