SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
明石 Haskell #2
自己紹介
               @akanehara

新大阪のWeb制作スタジオでプログラマーやってます

Flashを長くやってました

近頃は主に LAMP系Web / Androidアプリ / Java EE

Pythonをよく使います

趣味でフライトシミュレータ作ったり

Scala経由でHaskellに関心を
本日のお題
明石焼きを
                  たべにきた
       いかなご釘煮も買ってかえるよ!

@a k a neh a ra
いやいやいや、
リストモナドを
                  作ってみた
                   in 明石

@a k a neh a ra
突然ですが
みんなだいすきリスト内包
みんなだいすきリスト内包

単純に map, filter の別表現として
[ x * x | x <- xs, odd x ]
-- リスト xs のうち奇数の要素を抽出してさらに2乗


生成部を複数もつことができ、組み合わせを展開できる
[ (x, y) | x <- xs, y <- ys, x /= y]
-- リスト xs, ys の要素のすべての組み合わせのうち
-- 同じ要素でないもの


Pythonのリスト内包も負けないくらい強力!(ステマ)
[(x, y) for x in xs for y in ys if x != y]
リスト内包のひみつ

[ (x, bar) | (x,y) <- foos, x  < 2,
              bar <- bars, bar < y ]

                              等価


foos >>= (x, y) -> guard (x < 2) >>
  bars >>= bar -> guard (bar < y) >>
    return (x, bar)

          http://en.wikibooks.org/wiki/Haskell/Syntactic_sugar
Haskellのリスト内包は
リストモナドの糖衣構文
モナドこわい…
>>=(´・ω・`)>>
モナドこわいなりに
対応づけてみる(´・ω・`)
カラーばん

  リストないほうのひみつ
[ (x, bar) | (x,y) <- foos, x  < 2,
              bar <- bars, bar < y ]

                     等価


foos >>= (x, y) -> guard (x < 2) >>
  bars >>= bar -> guard (bar < y) >>
    return (x, bar)
わからんなりに読み取れること


foos >>= (x, y) -> guard (x < 2) >>
  bars >>= bar -> guard (bar < y) >>
    return (x, bar)

リストの >>=, return と guard 関数をまねること
ができれば(糖衣構文はさておき)リスト内包の力
の源が手に入るっぽい
作ってみよう!
方針
みんなだいすき(異論は認める)JavaScript


実験なので手っ取り早く組み込みArrayを拡張
var A = Array; // 長いからエイリアス(ひどい)


演算子はオブジェクトのメソッドで語順をそれっぽく
xs.mbind(function(x) { ...
xs >>= x -> ...


リスト内包の動作の再現をひとまずのゴールに
リストのreturn

Haskell
   return   :: Monad m => a -> m a
   return x = [x]


JavaScript
A.mreturn = function(x) { return [x]; };
// クラスメソッド
A.prototype.mreturn = function(x) { return [x]; };
// インスタンスメソッド
return が予約語なので mreturn という名前で定義
便宜上、クラスとオブジェクト両方に実装
リストの>>=

Hakell
   (>>=)     :: Monad m => m a -> (a -> m b) -> m b
   m >>= k   = foldr ((++) . k) [] m
ぱっと見で何やってるかわかりづらい

型の m を [ ] に置き換えて、
さらに理解しやすく書きなおすとこう↓

    (>>=)    :: [a] -> (a -> [b]) -> [b]
    xs >>= f = concat $ map f xs

左辺のリスト xs を 関数 f :: a -> [b] で map して得られるリストのリス
トを concat (連結)している
リストの>>=

GHCi で試してみる

Prelude> [1,2,3] >>= x -> [x, x*10]
[1, 10, 2, 20, 3, 30]




[1, 2, 3]                   -- 左辺のリストが

[[1, 10], [2, 20], [3, 30]] -- mapされて…

[1, 10, 2, 20, 3, 30]       -- concat(連結)されてる
ところで >> は?


       さっき「リスト内包のひみつ」
          で出てきた >> て何よ


foos >>= (x, y) -> guard (x < 2) >>
  bars >>= bar -> guard (bar < y) >>
    return (x, bar)
ところで >> は?


Haskell
   (>>)     :: m a -> m b -> m b
   m >> k   = m >>= _ -> k

右辺が左辺値を使わない状況で >>= の代わりに使える
つまり、

Prelude> [1..3] >>= _ -> [0,1]
[0,1,0,1,0,1]

を、もっと短くこう書ける

Prelude> [1..3] >> [0,1]
[0,1,0,1,0,1]
リストの>>=

JavaScript
// (>>=)         :: Monad m => m a -> (a -> m b) -> m b
// this >>= f = foldr ((++) . f) [] this
A.prototype.mbind = function(f) {
   return this.reduceRight(
      function(acc, x) { return f(x).concat(acc); },
      []
   );
};
guard 関数

定義

guard         :: MonadPlus m => Bool -> m ()
guard True    = return ()
guard False   = mzero


     _人人人人人人人人人_
     > 突然の MonadPlus <
      ̄Y^Y^Y^Y^Y^Y^Y^Y ̄
MonadPlus って何ぞ?
class Monad m => MonadPlus m where
   mzero :: m a
   mplus :: m a -> m a -> m a

instance MonadPlus [] where
   mzero = []
   mplus = (++)
…加法?…単位元…?モナドをモノイドみたいに扱うの?
何に使うんだろ(´・ω・`)今は気にしないでおこう(遅延理解)


ともあれ、リストの        mzero は空リスト
だということがわかる。
guard 関数

やっぱり GHCi で試してみる
Prelude> guard True >> [5]
[5]
Prelude> guard False >> [5]
[]
お、フィルタされた!

同じ意味の別の式
Prelude> [()] >>= _ -> [5]
[5]
Prelude> []   >>= _ -> [5]
[]

[] が乗法の0みたいに機能してる…もしかして >>= って乗法(・∀・)?
guard 関数


というわけで、まずは MonadPlus を実装

JavaScript
// mzero :: MonadPlus m => m a
// mzero = []
A.mzero = [];

// mplus :: MonadPlus m => m a -> m a -> m a
// mplus = (++)
A.prototype.mplus = A.prototype.concat;
guard 関数

JavaScript
//   guard :: MonadPlus m => Bool -> m ()
//   guard True = return ()
//   guard False = mzero
//   | 引数にMonadPlusを1つも取らないのでOOPの多態を頼れない
// | 苦肉の策で型注釈代わりにクラスを与える
function guard(M, b) {
  if (b) {
    return M.mreturn(null);
  } else {
    return M.mzero;
  }
}


使うときは MonadPlus m が Array であることを引数で教える><
guard(A, True) // guard True :: [()]
guard(A, False) // guard False :: [()]
ここまでで
>>= と return と guard
    が   ったので
リスト内包ごっこ
Haskell
Prelude> [(x, y) | x <- [1,2,3], y <- [1,2,3], x /= y ]
[(1,2),(1,3),(2,1),(2,3),(3,1),(3,2)]


JavaScript
[1,2,3].mbind(function(x) {
  return [1,2,3].mbind(function(y) {
    return guard(A, x != y).mbind(function() {
      return A.mreturn([x, y]);
    });
  });
});

[[1,2],[1,3],[2,1],[2,3],[3,1],[3,2]]



                  \(^o^)/ わーい!
あ。
モナド則
モナド則を満たしてないと
ちゃんと応用できない
既存のモナドなので
必要ないかとは思うけど、一応
モナド則


1. return が >>= に関して左単位元

2. return が >>= に関して右単位元

3. 結合法則
Arrayの同値比較がないので
StackOverflowで拾ったこれ使います

function arrayEq(a, b) { return !(a < b || a > b); }
1.return が >>= に関して左単位元


Haskell
(return x) >>= f        ==   f x

JavaScript
M.mreturn(x).mbind(f)   ==   f(5)


function f(x) { return [x, x*x, x*x*x]; }
function g(x) { return [x*10, x*100, x*1000]; }

arrayEq( A.mreturn(5).mbind(f), f(5) );
> true
arrayEq( A.mreturn(5).mbind(g), g(5) );
> true
2.return が >>= に関して右単位元


Haskell
m >>= return         == m

JavaScript
m.mbind(M.mreturn)   ==     m


arrayEq( [1,2,3].mbind(A.mreturn),       [1,2,3] ));
> true

arrayEq( [[1,2],[3,4]].mbind(A.mreturn), [[1,2],[3,4]] ));
> true
3.結合法則


Haskell
(m >>= f) >>= g
==
m >>= (x -> f x >>= g)

JavaScript
(m.mbind(f)).mbind(g)
==
m.mbind(function(x) { return f(x).mbind(g); })

arrayEq(
   ([1,2,3].mbind(f)).mbind(g),
    [1,2,3].mbind(function(x) { return f(x).mbind(g); })
);

> true
満たしてる!
    たぶん…(´・ω・`)
ちゃんとした確かめかたは知らないです…
モナディック関数のあれやこれ

// join     :: m (m a) -> m a
// join x = x >>= id
function join(x) { return x.mbind(id); }
 
// (>=>)       :: Monad m => (a -> m b) -> (b -> m c) -> a -> m c
// f (>=>) g = x -> f x >>= g
function mcompose(f, g) {
  return function(x) {
     return f(x).mbind(g);
  };
}
 
// liftM        :: (a1 -> r) -> m a1 -> m r
// liftM f m1 = m1 >>= x1 -> return (f x1)
function liftM(f) {
  return function(m1) {
     return m1.mbind(function(x1) {
       return m1.mreturn(f(x1));
     });
  };
}


mreturn と mbind しか使ってないので他のモナドでもちゃんと動くよ!
やってみた感想

理解が加速した

2冊めの本を読む感覚

移植元の言語にあって移植先の言語にない機能の意義
を実感

定義を丁寧に読む動機づけになった

楽しかった
ありがとうございました
          \(^o^)/
 コードここにおいときますね↓
https://gist.github.com/4297448

Mais conteúdo relacionado

Mais procurados

Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Joe_noh
 
Ruby初級者向けレッスン 53回 ─── Array と Hash
Ruby初級者向けレッスン  53回 ─── Array と HashRuby初級者向けレッスン  53回 ─── Array と Hash
Ruby初級者向けレッスン 53回 ─── Array と Hashhigaki
 
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数Taketo Sano
 
コードを書けば複素数がわかる
コードを書けば複素数がわかるコードを書けば複素数がわかる
コードを書けば複素数がわかるTaketo Sano
 
Elixirだ 第2回
Elixirだ 第2回Elixirだ 第2回
Elixirだ 第2回Joe_noh
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門Kimikazu Kato
 
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Joe_noh
 
(define)なしで再帰関数を定義する
(define)なしで再帰関数を定義する(define)なしで再帰関数を定義する
(define)なしで再帰関数を定義するblackenedgold
 
"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6risou
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
wakuwaku Scala ~Scala入門勉強会~ 資料
wakuwaku Scala ~Scala入門勉強会~ 資料wakuwaku Scala ~Scala入門勉強会~ 資料
wakuwaku Scala ~Scala入門勉強会~ 資料Mizuki Yamanaka
 
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-Hiromasa Ohashi
 
すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章aomori ringo
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Prunus 1350
 
Java8 Lambda chapter5
Java8 Lambda chapter5Java8 Lambda chapter5
Java8 Lambda chapter5Takinami Kei
 

Mais procurados (20)

Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半
 
Ruby初級者向けレッスン 53回 ─── Array と Hash
Ruby初級者向けレッスン  53回 ─── Array と HashRuby初級者向けレッスン  53回 ─── Array と Hash
Ruby初級者向けレッスン 53回 ─── Array と Hash
 
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数
 
コードを書けば複素数がわかる
コードを書けば複素数がわかるコードを書けば複素数がわかる
コードを書けば複素数がわかる
 
Elixirだ 第2回
Elixirだ 第2回Elixirだ 第2回
Elixirだ 第2回
 
MP in Scala
MP in ScalaMP in Scala
MP in Scala
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
 
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -
 
(define)なしで再帰関数を定義する
(define)なしで再帰関数を定義する(define)なしで再帰関数を定義する
(define)なしで再帰関数を定義する
 
"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
CLR/H No.35-2
CLR/H No.35-2CLR/H No.35-2
CLR/H No.35-2
 
wakuwaku Scala ~Scala入門勉強会~ 資料
wakuwaku Scala ~Scala入門勉強会~ 資料wakuwaku Scala ~Scala入門勉強会~ 資料
wakuwaku Scala ~Scala入門勉強会~ 資料
 
Applicative functor
Applicative functorApplicative functor
Applicative functor
 
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-
 
 
  
 
 
すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
 
Java8 Lambda chapter5
Java8 Lambda chapter5Java8 Lambda chapter5
Java8 Lambda chapter5
 

Destaque

Open science for Bio-Hacker
Open science for Bio-HackerOpen science for Bio-Hacker
Open science for Bio-HackerStefan Kasberger
 
Theoretical Artefact or Common Phenomenon? Revisiting Prominent Cases of Path...
Theoretical Artefact or Common Phenomenon? Revisiting Prominent Cases of Path...Theoretical Artefact or Common Phenomenon? Revisiting Prominent Cases of Path...
Theoretical Artefact or Common Phenomenon? Revisiting Prominent Cases of Path...Dobusch Leonhard
 
Map your City - Location Based Service Project
Map your City - Location Based Service ProjectMap your City - Location Based Service Project
Map your City - Location Based Service ProjectStefan Kasberger
 
Das Netzwerk der Seltenen Erden am Beispiel Neodym
Das Netzwerk der Seltenen Erden am Beispiel NeodymDas Netzwerk der Seltenen Erden am Beispiel Neodym
Das Netzwerk der Seltenen Erden am Beispiel NeodymStefan Kasberger
 
Open Science - Freie Wissenschaft für eine freie Gesellschaft
Open Science - Freie Wissenschaft für eine freie GesellschaftOpen Science - Freie Wissenschaft für eine freie Gesellschaft
Open Science - Freie Wissenschaft für eine freie GesellschaftStefan Kasberger
 
Open Science für Citizen Scientists
Open Science für Citizen ScientistsOpen Science für Citizen Scientists
Open Science für Citizen ScientistsStefan Kasberger
 
Die Kunst von Offenheit und Kollaboration
Die Kunst von Offenheit und KollaborationDie Kunst von Offenheit und Kollaboration
Die Kunst von Offenheit und KollaborationStefan Kasberger
 

Destaque (7)

Open science for Bio-Hacker
Open science for Bio-HackerOpen science for Bio-Hacker
Open science for Bio-Hacker
 
Theoretical Artefact or Common Phenomenon? Revisiting Prominent Cases of Path...
Theoretical Artefact or Common Phenomenon? Revisiting Prominent Cases of Path...Theoretical Artefact or Common Phenomenon? Revisiting Prominent Cases of Path...
Theoretical Artefact or Common Phenomenon? Revisiting Prominent Cases of Path...
 
Map your City - Location Based Service Project
Map your City - Location Based Service ProjectMap your City - Location Based Service Project
Map your City - Location Based Service Project
 
Das Netzwerk der Seltenen Erden am Beispiel Neodym
Das Netzwerk der Seltenen Erden am Beispiel NeodymDas Netzwerk der Seltenen Erden am Beispiel Neodym
Das Netzwerk der Seltenen Erden am Beispiel Neodym
 
Open Science - Freie Wissenschaft für eine freie Gesellschaft
Open Science - Freie Wissenschaft für eine freie GesellschaftOpen Science - Freie Wissenschaft für eine freie Gesellschaft
Open Science - Freie Wissenschaft für eine freie Gesellschaft
 
Open Science für Citizen Scientists
Open Science für Citizen ScientistsOpen Science für Citizen Scientists
Open Science für Citizen Scientists
 
Die Kunst von Offenheit und Kollaboration
Die Kunst von Offenheit und KollaborationDie Kunst von Offenheit und Kollaboration
Die Kunst von Offenheit und Kollaboration
 

Semelhante a リストモナドを作ってみた

F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~Nobuhisa Koizumi
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座bleis tift
 
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪yashigani
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナドKousuke Ruichi
 
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナドYoshihiro Mizoguchi
 
プログラミング言語Scala
プログラミング言語Scalaプログラミング言語Scala
プログラミング言語ScalaTanUkkii
 
ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)taskie
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミングOuka Yuka
 
代数的実数とCADの実装紹介
代数的実数とCADの実装紹介代数的実数とCADの実装紹介
代数的実数とCADの実装紹介Masahiro Sakai
 
System select hint_for_h2
System select hint_for_h2System select hint_for_h2
System select hint_for_h2Jun Chiba
 
言語処理系入門€5
言語処理系入門€5言語処理系入門€5
言語処理系入門€5Kenta Hattori
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPIDaisuke Igarashi
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit ScalaKota Mizushima
 

Semelhante a リストモナドを作ってみた (20)

F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
 
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
 
MP in Haskell
MP in HaskellMP in Haskell
MP in Haskell
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナド
 
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド
 
HaskellDB
HaskellDBHaskellDB
HaskellDB
 
プログラミング言語Scala
プログラミング言語Scalaプログラミング言語Scala
プログラミング言語Scala
 
ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
Haskell超入門 Part.1
Haskell超入門 Part.1Haskell超入門 Part.1
Haskell超入門 Part.1
 
Prml sec6
Prml sec6Prml sec6
Prml sec6
 
Swiftおさらい
SwiftおさらいSwiftおさらい
Swiftおさらい
 
代数的実数とCADの実装紹介
代数的実数とCADの実装紹介代数的実数とCADの実装紹介
代数的実数とCADの実装紹介
 
System select hint_for_h2
System select hint_for_h2System select hint_for_h2
System select hint_for_h2
 
言語処理系入門€5
言語処理系入門€5言語処理系入門€5
言語処理系入門€5
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
 
NLPforml5
NLPforml5NLPforml5
NLPforml5
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit Scala
 

Último

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Último (9)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL 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論文紹介: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...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

リストモナドを作ってみた