Submit Search
Upload
楽しいプログラミング
•
Download as PPTX, PDF
•
1 like
•
1,029 views
明
明洋 庄司
Follow
福井技術者の集い その5 発表資料
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 24
Download now
Recommended
iii_SGMI #5 "OOP & Design Patterns"
iii_SGMI #5 "OOP & Design Patterns"
Ryohei Suzuki
(超初心者向け)オブジェクト指向とC#
(超初心者向け)オブジェクト指向とC#
ssusera3d157
関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)
tadaaki hayashi
No more Legacy documents
No more Legacy documents
bleis tift
C#erがF#に這い寄ってみた
C#erがF#に這い寄ってみた
Hiroshi Maekawa
Fluent Feature in F#
Fluent Feature in F#
igeta
C言語について
C言語について
Katsuro-u
コードゴルフのススメ(C言語)
コードゴルフのススメ(C言語)
Fumihito Yokoyama
Recommended
iii_SGMI #5 "OOP & Design Patterns"
iii_SGMI #5 "OOP & Design Patterns"
Ryohei Suzuki
(超初心者向け)オブジェクト指向とC#
(超初心者向け)オブジェクト指向とC#
ssusera3d157
関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)
tadaaki hayashi
No more Legacy documents
No more Legacy documents
bleis tift
C#erがF#に這い寄ってみた
C#erがF#に這い寄ってみた
Hiroshi Maekawa
Fluent Feature in F#
Fluent Feature in F#
igeta
C言語について
C言語について
Katsuro-u
コードゴルフのススメ(C言語)
コードゴルフのススメ(C言語)
Fumihito Yokoyama
F#の基礎(?)
F#の基礎(?)
bleis tift
コンピュテーション式ハンズオン
コンピュテーション式ハンズオン
ssuserb6e6d5
Osc2012 hiroshima
Osc2012 hiroshima
Akira Kaneda
金大アルゴリズム勉強会#007資料
金大アルゴリズム勉強会#007資料
Takumi Murano
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
Kiyotaka Kunihira
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Shinichi Okada
20170114 lod challenge
20170114 lod challenge
zuhitoslide
Rubyのenum系高階関数を elixirでも使いたい
Rubyのenum系高階関数を elixirでも使いたい
sotatashiro
2019年度チュートリアルBPE
2019年度チュートリアルBPE
広樹 本間
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
Kohei Taniguchi
括弧を使わないLispプログラミング
括弧を使わないLispプログラミング
Yuta Mizushima
解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler
bleis tift
F# intro
F# intro
yoko ishikuro
Perlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobody
azuma satoshi
第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪
Naoki Kitora
Rのコードをキレイに見せたい
Rのコードをキレイに見せたい
mangantempy
最近のPHP事情とNagoya.phpへのお誘い #ngk2018b
最近のPHP事情とNagoya.phpへのお誘い #ngk2018b
77web
Phperがgoをさわってみた
Phperがgoをさわってみた
yasuo424
TalknoteとGolang
TalknoteとGolang
leverages_event
札幌F#勉強会とは何だったのか
札幌F#勉強会とは何だったのか
Kenta USAMI
第0回プログラミング講座
第0回プログラミング講座
happo31
Python勉強会 2015-12-02
Python勉強会 2015-12-02
WoodPecker (Shizuoka Univ)
More Related Content
What's hot
F#の基礎(?)
F#の基礎(?)
bleis tift
コンピュテーション式ハンズオン
コンピュテーション式ハンズオン
ssuserb6e6d5
Osc2012 hiroshima
Osc2012 hiroshima
Akira Kaneda
金大アルゴリズム勉強会#007資料
金大アルゴリズム勉強会#007資料
Takumi Murano
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
Kiyotaka Kunihira
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Shinichi Okada
20170114 lod challenge
20170114 lod challenge
zuhitoslide
Rubyのenum系高階関数を elixirでも使いたい
Rubyのenum系高階関数を elixirでも使いたい
sotatashiro
2019年度チュートリアルBPE
2019年度チュートリアルBPE
広樹 本間
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
Kohei Taniguchi
括弧を使わないLispプログラミング
括弧を使わないLispプログラミング
Yuta Mizushima
解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler
bleis tift
F# intro
F# intro
yoko ishikuro
Perlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobody
azuma satoshi
第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪
Naoki Kitora
Rのコードをキレイに見せたい
Rのコードをキレイに見せたい
mangantempy
最近のPHP事情とNagoya.phpへのお誘い #ngk2018b
最近のPHP事情とNagoya.phpへのお誘い #ngk2018b
77web
Phperがgoをさわってみた
Phperがgoをさわってみた
yasuo424
TalknoteとGolang
TalknoteとGolang
leverages_event
札幌F#勉強会とは何だったのか
札幌F#勉強会とは何だったのか
Kenta USAMI
What's hot
(20)
F#の基礎(?)
F#の基礎(?)
コンピュテーション式ハンズオン
コンピュテーション式ハンズオン
Osc2012 hiroshima
Osc2012 hiroshima
金大アルゴリズム勉強会#007資料
金大アルゴリズム勉強会#007資料
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
20170114 lod challenge
20170114 lod challenge
Rubyのenum系高階関数を elixirでも使いたい
Rubyのenum系高階関数を elixirでも使いたい
2019年度チュートリアルBPE
2019年度チュートリアルBPE
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
括弧を使わないLispプログラミング
括弧を使わないLispプログラミング
解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler
F# intro
F# intro
Perlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobody
第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪
Rのコードをキレイに見せたい
Rのコードをキレイに見せたい
最近のPHP事情とNagoya.phpへのお誘い #ngk2018b
最近のPHP事情とNagoya.phpへのお誘い #ngk2018b
Phperがgoをさわってみた
Phperがgoをさわってみた
TalknoteとGolang
TalknoteとGolang
札幌F#勉強会とは何だったのか
札幌F#勉強会とは何だったのか
Similar to 楽しいプログラミング
第0回プログラミング講座
第0回プログラミング講座
happo31
Python勉強会 2015-12-02
Python勉強会 2015-12-02
WoodPecker (Shizuoka Univ)
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
Yoshiki Shibukawa
クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017
Motohiro Ueki
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
keroyonn
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
文樹 高橋
社内勉強会 2014/10/08
社内勉強会 2014/10/08
Takaki Yoneyama
Oss翻訳プロジェクトに参加してみた
Oss翻訳プロジェクトに参加してみた
Akira Kaneda
Cap01
Cap01
遼太郎 浦郷
OSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツール
Tano Makoto
What's new in 4.0 of LibreOffice / LibreOffice 4.0の新機能
What's new in 4.0 of LibreOffice / LibreOffice 4.0の新機能
Naruhiko Ogasawara
PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」
Preferred Networks
コードゴルフのススメ(C言語)
コードゴルフのススメ(C言語)
Fumihito Yokoyama
コンソールベタ打ち卒業:スクリプトエディタを使おう
コンソールベタ打ち卒業:スクリプトエディタを使おう
Yu Tamura
Kyotopm発表資料20130330
Kyotopm発表資料20130330
Kiyo Tsunezumi
趣味プロダクトで楽しいコードライフワークを送る
趣味プロダクトで楽しいコードライフワークを送る
volpe_hd28v
C#言語機能の作り方
C#言語機能の作り方
信之 岩永
ど素人向け エンジニア勉強会
ど素人向け エンジニア勉強会
YukiIwasaki2764
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」
nishikawa_makoto7
社内勉強会1 go lang
社内勉強会1 go lang
Tsuyoshi Nakamura
Similar to 楽しいプログラミング
(20)
第0回プログラミング講座
第0回プログラミング講座
Python勉強会 2015-12-02
Python勉強会 2015-12-02
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
社内勉強会 2014/10/08
社内勉強会 2014/10/08
Oss翻訳プロジェクトに参加してみた
Oss翻訳プロジェクトに参加してみた
Cap01
Cap01
OSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツール
What's new in 4.0 of LibreOffice / LibreOffice 4.0の新機能
What's new in 4.0 of LibreOffice / LibreOffice 4.0の新機能
PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」
コードゴルフのススメ(C言語)
コードゴルフのススメ(C言語)
コンソールベタ打ち卒業:スクリプトエディタを使おう
コンソールベタ打ち卒業:スクリプトエディタを使おう
Kyotopm発表資料20130330
Kyotopm発表資料20130330
趣味プロダクトで楽しいコードライフワークを送る
趣味プロダクトで楽しいコードライフワークを送る
C#言語機能の作り方
C#言語機能の作り方
ど素人向け エンジニア勉強会
ど素人向け エンジニア勉強会
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」
社内勉強会1 go lang
社内勉強会1 go lang
楽しいプログラミング
1.
楽しいプログラミング ~D言語~ Akihiro Shoji a.k.a
alphaKAI 福井技術者の集い その5
2.
自己紹介 • 鯖江高校3年生 • D言語と数学が大好き •
最近はλ計算に強い興味 • 実は 福井技術者の集い の創始者だったり…
3.
さて • 楽しいプログラミングとは • 短いコードでかけると楽だし楽しいよね?? •
すなわち、ワンライナー!! • 今回は”普通じゃない”D言語の世界について • よって、これからの発表は”普通のD言語”の書 き方ではない(所謂 “変態的”な書き方)
4.
ワンライナー #とは • ここで言うワンライナーはmain関数の中には1文 しか存在せず、main以外の名前を持つ関数をグ ローバルに定義しないこと
と定義する • ただし、import文や無名再帰のためのZ コンビネ ータ(後述)を実現するテンプレートは含めない
5.
とりあえず、まずはコー ド • こんなもの書きました • ワンライナーでBase64エンコード!!! •
https://gist.github.com/alphaKAI/78b9c7ad31195a702 dde • ワンライナーでBrainfuck処理系!!! • https://gist.github.com/alphaKAI/946a0b3564d48916c e94
6.
ようこそ D言語Lispへ
7.
D言語Lispとは • まず、Lispと書いてあるけどLispとは関係ない • 単に括弧が多くて一瞬Lispのように見えるという だけ •
破壊的代入は悪だ!(あくまでも個人の感覚です) • 破壊的代入の無い”クリーン”な世界を目指す • 破壊的代入を行わない => ワンライナーになる
8.
どうやるか • λ式のネスト • 無名再帰を導入(これでほぼ全ての事実現可能に) •
無名再帰の実現はZ Combinatorを用いる • 戻り値がvoidな関数呼び出しはカンマ演算子を用 いることで対処
9.
λ式のネスト • D言語ではλ式は以下のSyntax • (arguments
list) => expression; • つまり、ネストとは例えば • auto h = (int y) => (z => z * z)(y * 2); • これは、f(x) = x^2, g(x) = x * 2として • f(g(x)) = (x * 2)^2となるから • f(g(x)) ⇔ h(x)
10.
(明示的な)破壊的代入を処す • たとえば、x =
2; y = x * 2という処理(ここでx == 2, y == 4) • xに対して2を破壊的な代入をしている(yは形式的に書いているだけ) • これを隠蔽する方法 -> λ式 • (x => x * 2)(2)とすればいい。 • やったね!!! • つまり、変数はラムダ式の実引数として渡すことで隠蔽 • 値の授受は実引数として関数の実行結果を仮引数に渡すことで実現
11.
ループを殺せ!! • 簡単。再帰を用います。 • それも、無名再帰で •
無名再帰とは • 不動点コンビネータ(次ページで少し説明)を用 いて識別子に束縛されない関数を再帰するこ と
12.
不動点コンビネータの定義 • 高階関数gが不動点コンビネータであるとは • 任意の関数fで
p = g(f) としたとき、f(p) = pが成立するこ と • つまりは、∀ f, f(g(f)) = g(f) となるということ • 詳しくは、Wikipediaを… (時間の都合上割愛) • 有名な不動点コンビネータ(ハスケル・カリーによるもの) • Y = (λf.(λx. f(x x))(λx. f(x x)))
13.
ここでは、Zコンビネータ • Zコンビネータは通常のYコンビネータを一部η変 換することで与えられる • Z=λf.
(λx. f(λy. x x y)) (λx. f(λy. x x y)) • これをD言語でそのまま落としこむのは難しい(型 による制約) • 従ってここでは、テンプレートでの再帰によって 実現する
14.
D言語でZ コンビネータ • D言語でZ
コンビネータを実現するには、型の制 約が厳しい => テンプレートによって実現 • 以下に示すテンプレートで実現
15.
簡単な例 • ZコンビネータをZ(f)とする • フィボナッチ数列の漸化式を落としこむと
16.
メリット • 名前空間を汚さない(重要) • あくまでもラムダ式の一つなので再帰を行いた い(つまり、ループを行いたい)処理を実現可能
17.
カンマ演算子とは • 一文の中で複数の式を評価させる夢の演算子 • 例:
x = 2として, y = (x *= 2, 5)とすると • y == 5, x == 4となる • つまり。戻り値がvoidな関数を呼ぶ場合にこれを用い ることでワンライナーを保てる • y = (f(), g(x))とすることでf()が実行でき、yにg(x)を代 入できる(代入はしないので引数として渡す)
18.
とりあえず • D言語、最強だよね マジで
19.
Dのさらなる楽しみへ
20.
高速化を考える • Dには任意の関数をメモ化するテンプレートが標準ライブラ リにある • std.functional.memoize •
ある関数fをメモ化した関数をgとすると • alias g = memoize!f; でメモ化できる • => 明示的な代入をせずにメモ化できる • 先ほどのフィボナッチ数列の高速化
21.
比較してみる • (時間があれば)デモ • (時間がなければ結果だけ)
22.
こうなります…
23.
まとめ • D言語Lisp, 面白いですよ •
コードがなれないと読み難いし、難しいのでオススメはできませんが … • λ計算も楽しそうだよね • あ、あと • 以前発表した任意の関数をカリー化するテンプレートを用いること でさらにD言語Lispが便利になります • https://github.com/alphaKAI/kdtl/blob/master/source/curry.d
24.
ご清聴ありがとうございました
Download now