SlideShare a Scribd company logo
関数型プログラミング入門
for Matlabユーザー
丸田 一郎
アメリカで滞在していた研究室にて…
学生「何か手っ取り早くプログラミングが上達する
チュートリアルやってくださいよ」
○「Functional Programming とかどう?」
学生「Function ならみんな知ってますよ~
他のネタがいいです」
○「(これは教えがいがありそうやで…)」
という感じのいきさつで,一晩で準備したスライドの
日本語訳がこれです.過度な期待はしないでください.
このチュートリアルのねらい
対象
• Matlab初級者の大学生/大学院生/研究者
目標
• 関数型プログラミングをちょろっと勉強して
日々のコーディングを効率的にする
関数型プログラミング(FP)って何?
「関数を組み合わせて処理を記述する」
プログラミングパラダイムです
このチュートリアルでは,
「関数を組み合わせて処理を記述する」
うえで有用な機能・テクニックと,その
メリットについて例を挙げて説明します.
最初のトピックは「無名関数」です
そもそも無名関数(とかFP)って
勉強する価値あるの?
高確率でペイすると思います
その根拠は…
Q
A
To Be Continued
メジャー&保守的な言語 偉大な祖先
1958 Lisp
1967 Simula
1972 C
1983 C++
1995 ⋮ Java
2011 C++11 ⋮
2014 C++14 Java 8
クラスの導入
(オブジェクト指向)
無名関数の導入
(関数型プログラミング)
C++ と Java が無名関数を最近導入
関数型プログラミングの鍵となる機能
• C++ と Java が無名関数を最近導入
• 他の人気言語はとっくの昔に導入
• 他の関数型プログラミング由来の機能を
取り入れる言語も多い
無名関数(関数型プログラミング)の有用
性は広く認められていると考えられる
というわけで,無名関数の
使用例をみてみよう!
ここで考える例題
𝑦𝑦 = 𝑓𝑓 𝑥𝑥 = 𝑥𝑥3
− 𝑥𝑥 のグラフを
−1.2 ≤ 𝑥𝑥 ≤ 1.2の範囲で描け!
𝑥𝑥
𝑦𝑦
𝑦𝑦 = 𝑓𝑓(𝑥𝑥)
←たぶんこんな感じ
To Be Continued
-1 -0.5 0 0.5 1
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
x = -1.2:0.02:1.2; → x=[-1.20, -1.18,…, 1.20]
y = x.^3 - x; → y=[-0.53, -0.46,…, 0.53]
plot( x, y) → 配列のデータから描画
Matlabでグラフを描く普通のやり方
x = first:step:last
firstから始まってstep刻みで
lastまで続く配列(ベクトル)
ができます
y = x.^3 - x
.^は要素ごとにべき乗を行う演算
子です.減算はデフォルトでベク
トルに対応しています.
Matlab を知らない人に…
-1 -0.5 0 0.5 1
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
無名関数を使う例
f = @(x) x^3 - x; % fは関数
xrng = [-1.2, 1.2]; % 描画範囲の[下限,上限]
fplot(f,xrng) % 関数と範囲指定から描画
@(x) x^3 - x
Matlab の無名関数
x の関数 返り値は
𝑥𝑥3 − 𝑥𝑥
という構文です
f = @(x) x^3 - x;
fplot(f, xrng)
A 一行で書くとわかりやすいかも
f なんていらんかったんや!
Q どこが無名なの?
fplot( @(x) x^3-x, xrng)
名前っぽくね?
パッと見は些末な機能…
だけど関数型プログラミングの鍵
高階関数を使うときに超便利だから
無名関数 = 🍜🍜 即席で作れる使い捨ての関数
fplot( @(x) x^3-x, xrng)
なんで?
To Be Continued
高階関数とは?
引数 → 返り値
関数
function
Data → Data
高階関数
higher order function
Function → Data
Data → Function
Function → Function
汎関数
functional
※ 数学ではこのクラスを
特に functional と呼ぶが,
functional programming の
由来では無いっぽい
Function → Data
関数型プログラミングでは高階関数を駆使する
引数
plot( x, y) Data
fplot( f, xrng) Function
高階関数を使うとハイレベルなアルゴリズムを
容易に使いまわすことができる
⇒ fplot が如何にハイレベルか見てみよう
←高階関数
高階関数の例
←ただの関数
-1 -0.5 0 0.5 1
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
ただの関数 plot(x,y) の結果(拡大)
16
まぁ普通ですね
-1 -0.5 0 0.5 1
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
高階関数 fplot(f,xrng) の結果(拡大)
17
疎
密
適応ステップ!
18
描画する関数 f の形状に応じて適応的に
ステップ幅を調節しながらプロットする
fplot(f,xrng)
高階関数として実装することで,そ
こそこ高度なアルゴリズムを簡単か
つ自然に使いまわせている点に注目
まとめ (3/5)
関数型プログラミング
 関数を組み合わせて処理を記述するプログラミング
パラダイム
無名関数
 即席で作れる使い捨ての関数
高階関数
 引数や返値として関数をとる関数
 高度なアルゴリズムを再利用容易な形で実装する際
に便利 New
一見地味な無名関数だが
高階関数を使う上では必要不可欠
例題を通して確認
To Be Continued
例題 マサチューセッツ湾交通局(MBTA)提供
リアルタイムデータの可視化
バス・電車の位置情報を
リアルタイムで提供!
車両位置可視化プログラムを作りたい
MBTAからの
データ取得・解釈
かっこいい可視化
• ややこしい
• 面倒くさい
• 誰が作っても一緒
プログラムを2つの関数に分ける
ことにしてみよう
• かっこいい
• 個性を発揮できる部分
parse_mbta_feed(visualizer)
MBTAからのデータ取得・解釈部分
⇒ データの取得と解釈を行う
高階関数として実装
MBTAのサーバーにアクセスし
車両情報 (車両ID,x座標,y座標) を取得する度に,
引数で指定された関数 visualizer(id,x,y) を呼び出す.
id x y
Green-E 234222.4 899242.8
Orange 231959.8 894831.3
Orange 231900.0 894700.1
Red 240703.5 889367.2
:
parse_mbta_feed(...
@(id,x,y) fprintf('%st%ft%fn',id,x,y));
🍜🍜 文字列で出力する可視化関数
可視化その1 ターミナルに文字列でテスト出力
ボストンの地下鉄は
Red Line, Blue Line…
と色で呼ばれている
ちなみにバスには番号が
振られている
↓実行結果
退屈な部分の動作を確認!
1
1
1
10
11
111
39
39
504 55
60
608
69
7
742
749
749
751
88
9
92
93
Blue
CR-Fairmount
CR-FitchburgCR-Lowell
Green-B
Green-B
Green-B
n-B
Green-B
Green-C
Green-C
Green-C
Green-C
Green-D
Green-D
Green-D
Green-D
Green-D
Green-E
Green-E
Green-E
Green-E
Green-E
Orange
Orange
Orange
Red
Red
Red
可視化その2 地図上にテスト出力
parse_mbta_feed(...
@(id,x,y) text( x, y, id, 'Color', [1,1,1]));
🍜🍜グラフィカルな可視化関数,車両位置にIDを表示
1
1
1
10
11
111
111
43
504
55
608
65
9
70
70
741
749
751
83
88
9
92
93
BB
CR-Fitchburg
CR-Kingston
CR-Lowell
CR-Newburyport
CR-Providence
CR-Providence
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
O
O
O
O
R
R
R
可視化その3 本番用
parse_mbta_feed(@visualizer);
より手の込んだ可視化を実現する通常の関数ももちろん作れる
この例題の教訓
parse_mbta_feed(...
@(id,x,y) fprintf('%st%ft%fn',id,x,y));
fprintf と text は Matlab に元からある関数.
そのままで parse_mbta_feed() の引数として使え
るように設計されてはいない
無名関数を使うことで出来合いの関数を自作の
parse_mbta_feed() と簡単に組み合わせることが
できたのである!
parse_mbta_feed(...
@(id,x,y) text( x, y, id, 'Color', [1,1,1]));
ターミナルへの出力
地図への出力
まとめ (4/5)
関数型プログラミング
 関数を組み合わせて処理を記述するプログラミング
パラダイム
無名関数
 即席で作れる使い捨ての関数
 高階関数を組み合わせる際に便利
高階関数
 引数や返値として関数をとる関数
 高度なアルゴリズムを再利用容易な形で実装する際
に便利
New
引数 返り値
関数 Data Data
高階関数
Function Data
Data Function
Function Function
Q 関数を受け取って関数を返す関数とか
ほんとに要るんですか?
これ!
A 必要! 次の例で…
To Be Continued
高校生用の例 数値微分
とある関数の導関数がほしいけど計算するのがだるい
諸般の事情で得られないとき(最適化でよくある)
←微分の定義
←こんなもんでええやろ
(数値微分)
̇𝑓𝑓 𝑡𝑡 = lim
Δ𝑡𝑡→0
𝑓𝑓 𝑡𝑡 + Δ𝑡𝑡 − 𝑓𝑓 𝑡𝑡
Δ𝑡𝑡
≃
𝑓𝑓 𝑡𝑡 + 0.001 − 𝑓𝑓(𝑡𝑡)
0.001
ある関数 𝑓𝑓 が与えられたとき,
その導関数を返す高階関数を作ってみよう
dt = 0.001;
d = @(f) ( @(t) (f(t+dt)-f(t))/dt );
t の関数
…を返す f の関数
例 数値微分に基づいて与えられた関数の
導関数を生成する高階関数
f = @(t) sin(t);
fplot( d(f), [0,2*pi])
使用例 𝑓𝑓 𝑡𝑡 = sin(𝑡𝑡)の微分をプロット
当然 cos(𝑡𝑡) になる
f = @(t) sin(t);
fplot( d(d(f)), [0,2*pi])
使用例 𝑓𝑓 𝑡𝑡 = sin(𝑡𝑡)の2階微分をプロット
当然 −sin(𝑡𝑡) になる
f = @(t) sin(t);
fplot( d(d(d(f))), [0,2*pi])
使用例 𝑓𝑓 𝑡𝑡 = sin(𝑡𝑡)の3階微分をプロット
当然 −cos(𝑡𝑡) になる
f = @(t) sin(t);
fplot( d(d(d(d(f)))), [0,2*pi])
使用例 𝑓𝑓 𝑡𝑡 = sin(𝑡𝑡)の4階微分をプロット
当然 sin(𝑡𝑡) になる
f = @(t) sin(t);
fplot( d(d(d(d(d(f))))), [0,2*pi])
使用例 𝑓𝑓 𝑡𝑡 = sin(𝑡𝑡)の5階微分をプロット
当然 cos(𝑡𝑡) になる…とは限らない!
大学生用の宿題
• 5階微分の数値計算結果について論ぜよ
大学生用の例 常微分方程式の離散時間化
大抵の自然法則は常微分方程式で書かれている
ex. Van der Pole oscillator
̇𝑥𝑥1(𝑡𝑡)
̇𝑥𝑥2(𝑡𝑡)
=
𝑥𝑥2(𝑡𝑡)
1 − 𝑥𝑥1
2
𝑡𝑡 𝑥𝑥2 𝑡𝑡 − 𝑥𝑥1 𝑡𝑡
̇𝒙𝒙 𝑡𝑡 = 𝒇𝒇𝐂𝐂(𝒙𝒙 𝑡𝑡 )
でも差分方程式の方が扱いやすいこともある
𝒙𝒙 𝑘𝑘 + 1 ℎ = 𝒇𝒇𝐃𝐃 𝒙𝒙 𝑘𝑘ℎ
お手軽に変換 𝒇𝒇𝐂𝐂 → 𝒇𝒇𝐃𝐃 する方法があると便利!
( ℎ 時間刻み )
常微分方程式の離散化を行う高階関数
function [ fd ] = c2d_euler( fc, h )
function x_new = proto_fd(x)
x_new = x + h*fc(x);
end
fd = @proto_fd;
End
与えられた 𝑓𝑓C と ℎ に
基づいてオイラー法で
計算を行う関数を…
← 返す!
常微分方程式版の van der Pole oscillator
fc = @(x) [x(2); (1-x(1)^2)*x(2)-x(1)];
差分方程式版の生成
h = 0.2; % h:時間刻み
fd = c2d_euler(fc,h); % 簡単!
確認のために 𝒙𝒙(𝒕𝒕) の軌道を計算
N = 50; x = zeros(N,2);
x(1,:) = [2,0]; % 初期状態
for k=1:N-1
x(k+1,:) = fd(x(k,:)');
end 結果は次のスライド
使い方
0 2 4 6 8 10
t
-2.5
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
2.5x1
Continuous
Discrete誤差が大きい!
オイラー法はさすがに
安直すぎた模様
常微分方程式
̇𝒙𝒙 𝒕𝒕 = 𝒇𝒇𝐂𝐂 𝒙𝒙 𝒕𝒕
の解
得られた差分方程式
𝑥𝑥 𝑘𝑘 + 1 ℎ = 𝑓𝑓D 𝑥𝑥 𝑘𝑘ℎ
によって計算された軌道
大学生の常識 ルンゲ=クッタ法に基づく実装
function [ fd ] = c2d_rk4( fc, h )
function x_new = proto_fd(x)
k1 = fc(x);
k2 = fc(x+h/2*k1);
k3 = fc(x+h/2*k2);
k4 = fc(x+h*k3);
x_new = x + h/6*(k1+2*k2+2*k3+k4);
end
fd=@proto;
end
fd = c2d_rk4(fc,h);
% fd = c2d_euler(fc,h); ← 使い方は一緒
0 2 4 6 8 10
t
-2.5
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
2.5
x1
Continuous
Discrete
完全に一致!
信頼と実績の
ルンゲ=クッタ法
離散化手法が高階関数として分離され
ているために,離散化手法の変更・修
正・比較が容易になっている
まとめ
関数型プログラミング
 関数を組み合わせて処理を記述するプログラミング
パラダイム
無名関数
 即席で作れる使い捨ての関数
 高階関数を組み合わせる際に便利
高階関数
 引数や返値として関数をとる関数
 高度なアルゴリズムを再利用容易な形で実装する際
に便利
To Be Continued第1部 今日から役立つFP / 完
Emphasized
第2部 関数の副作用と並列処理
1. map 高階関数と並列化
2. ループと再帰と並列化
3. reduce 高階関数と並列化
4. MapReduce
※ 準備期間が一晩だったので
第2部のスライドは準備が
間に合いませんでした
Special Thanks to
Robust Systems Lab
Northeastern University

More Related Content

What's hot

ブレインパッドにおける機械学習プロジェクトの進め方
ブレインパッドにおける機械学習プロジェクトの進め方ブレインパッドにおける機械学習プロジェクトの進め方
ブレインパッドにおける機械学習プロジェクトの進め方
BrainPad Inc.
 
モデルではなく、データセットを蒸留する
モデルではなく、データセットを蒸留するモデルではなく、データセットを蒸留する
モデルではなく、データセットを蒸留する
Takahiro Kubo
 
Hyperoptとその周辺について
Hyperoptとその周辺についてHyperoptとその周辺について
Hyperoptとその周辺について
Keisuke Hosaka
 
楽しい研究のために今からできること 〜新しく研究を始める皆さんへ〜
楽しい研究のために今からできること 〜新しく研究を始める皆さんへ〜楽しい研究のために今からできること 〜新しく研究を始める皆さんへ〜
楽しい研究のために今からできること 〜新しく研究を始める皆さんへ〜
諒介 荒木
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
 
Recent Advances on Transfer Learning and Related Topics Ver.2
Recent Advances on Transfer Learning and Related Topics Ver.2Recent Advances on Transfer Learning and Related Topics Ver.2
Recent Advances on Transfer Learning and Related Topics Ver.2
Kota Matsui
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
joisino
 
組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画まで組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画までShunji Umetani
 
時系列分析による異常検知入門
時系列分析による異常検知入門時系列分析による異常検知入門
時系列分析による異常検知入門Yohei Sato
 
多目的強凸最適化のパレート集合のトポロジー
多目的強凸最適化のパレート集合のトポロジー多目的強凸最適化のパレート集合のトポロジー
多目的強凸最適化のパレート集合のトポロジー
KLab Inc. / Tech
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual TalksYuya Unno
 
Optimizer入門&最新動向
Optimizer入門&最新動向Optimizer入門&最新動向
Optimizer入門&最新動向
Motokawa Tetsuya
 
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
Yuta Kikuchi
 
幾何を使った統計のはなし
幾何を使った統計のはなし幾何を使った統計のはなし
幾何を使った統計のはなし
Toru Imai
 
PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催
PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催
PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催
Preferred Networks
 
時系列問題に対するCNNの有用性検証
時系列問題に対するCNNの有用性検証時系列問題に対するCNNの有用性検証
時系列問題に対するCNNの有用性検証
Masaharu Kinoshita
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
 
CuPy解説
CuPy解説CuPy解説
CuPy解説
Ryosuke Okuta
 
[研究室論文紹介用スライド] Adversarial Contrastive Estimation
[研究室論文紹介用スライド] Adversarial Contrastive Estimation[研究室論文紹介用スライド] Adversarial Contrastive Estimation
[研究室論文紹介用スライド] Adversarial Contrastive Estimation
Makoto Takenaka
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
joisino
 

What's hot (20)

ブレインパッドにおける機械学習プロジェクトの進め方
ブレインパッドにおける機械学習プロジェクトの進め方ブレインパッドにおける機械学習プロジェクトの進め方
ブレインパッドにおける機械学習プロジェクトの進め方
 
モデルではなく、データセットを蒸留する
モデルではなく、データセットを蒸留するモデルではなく、データセットを蒸留する
モデルではなく、データセットを蒸留する
 
Hyperoptとその周辺について
Hyperoptとその周辺についてHyperoptとその周辺について
Hyperoptとその周辺について
 
楽しい研究のために今からできること 〜新しく研究を始める皆さんへ〜
楽しい研究のために今からできること 〜新しく研究を始める皆さんへ〜楽しい研究のために今からできること 〜新しく研究を始める皆さんへ〜
楽しい研究のために今からできること 〜新しく研究を始める皆さんへ〜
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
Recent Advances on Transfer Learning and Related Topics Ver.2
Recent Advances on Transfer Learning and Related Topics Ver.2Recent Advances on Transfer Learning and Related Topics Ver.2
Recent Advances on Transfer Learning and Related Topics Ver.2
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
 
組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画まで組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画まで
 
時系列分析による異常検知入門
時系列分析による異常検知入門時系列分析による異常検知入門
時系列分析による異常検知入門
 
多目的強凸最適化のパレート集合のトポロジー
多目的強凸最適化のパレート集合のトポロジー多目的強凸最適化のパレート集合のトポロジー
多目的強凸最適化のパレート集合のトポロジー
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks
 
Optimizer入門&最新動向
Optimizer入門&最新動向Optimizer入門&最新動向
Optimizer入門&最新動向
 
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
 
幾何を使った統計のはなし
幾何を使った統計のはなし幾何を使った統計のはなし
幾何を使った統計のはなし
 
PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催
PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催
PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催
 
時系列問題に対するCNNの有用性検証
時系列問題に対するCNNの有用性検証時系列問題に対するCNNの有用性検証
時系列問題に対するCNNの有用性検証
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
CuPy解説
CuPy解説CuPy解説
CuPy解説
 
[研究室論文紹介用スライド] Adversarial Contrastive Estimation
[研究室論文紹介用スライド] Adversarial Contrastive Estimation[研究室論文紹介用スライド] Adversarial Contrastive Estimation
[研究室論文紹介用スライド] Adversarial Contrastive Estimation
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
 

Similar to 関数型プログラミング入門 for Matlab ユーザー

関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』
Kenta USAMI
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門
bleis tift
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
Seiya Tokui
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
Shinichi Kozake
 
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式digitalghost
 
D言語にまだ入っていない新機能 (Dの日#2)
D言語にまだ入っていない新機能 (Dの日#2)D言語にまだ入っていない新機能 (Dの日#2)
D言語にまだ入っていない新機能 (Dの日#2)
tom-tan
 
2023_freshman
2023_freshman2023_freshman
2023_freshman
TakaakiYonekura
 
講座C入門
講座C入門講座C入門
講座C入門
Tokai University
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
Ransui Iso
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
 
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへNaoki Kitora
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPAkira Takahashi
 
Chainerの使い方と 自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と 自然言語処理への応用
Yuya Unno
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
Shinsuke Sugaya
 
Kosakunakano
KosakunakanoKosakunakano
Kosakunakano
ssuserb09fbd
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
SatoYu1ro
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
YOSHIKAWA Ryota
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3
Kenta Hattori
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
TensorflowとKerasによる深層学習のプログラム実装実践講座
TensorflowとKerasによる深層学習のプログラム実装実践講座TensorflowとKerasによる深層学習のプログラム実装実践講座
TensorflowとKerasによる深層学習のプログラム実装実践講座
Ruo Ando
 

Similar to 関数型プログラミング入門 for Matlab ユーザー (20)

関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式
 
D言語にまだ入っていない新機能 (Dの日#2)
D言語にまだ入っていない新機能 (Dの日#2)D言語にまだ入っていない新機能 (Dの日#2)
D言語にまだ入っていない新機能 (Dの日#2)
 
2023_freshman
2023_freshman2023_freshman
2023_freshman
 
講座C入門
講座C入門講座C入門
講座C入門
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 
Chainerの使い方と 自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と 自然言語処理への応用
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
 
Kosakunakano
KosakunakanoKosakunakano
Kosakunakano
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
TensorflowとKerasによる深層学習のプログラム実装実践講座
TensorflowとKerasによる深層学習のプログラム実装実践講座TensorflowとKerasによる深層学習のプログラム実装実践講座
TensorflowとKerasによる深層学習のプログラム実装実践講座
 

関数型プログラミング入門 for Matlab ユーザー