SlideShare a Scribd company logo
1 of 83
Download to read offline
Haskell勉強会2 in ie
2015/05/04
@maeken2010
勉強会について
• 前回のHaskell勉強会 in ieの続きのようなもの
• 「すごいhaskell楽しく学ぼう」本を元にしてい
ます
• スライド内のコード詰め合わせを下記に公開して
います
https://gist.github.com/maeken2010/8e70e07435137702ac3c
お詫びがあります
今日の勉強会内訳
今日の勉強会内訳
型勉強会 in ie
2015/05/04
@maeken2010
目的
• Haskellの型とは
• 型の定義
• 型クラスの定義
• 型インスタンス(少しFunctor)
型おさらい
• 型の種類
• Int,Float,Bool,Char,String,[Int]…
• 型は「値の集合」
• Int,Integer,Float,Char,String
• [Int],[Char],[a]
• (a,b),a->a,Maybe a
• とかとか
型クラスおさらい
• 型クラス
• (==) :: Eq a => a -> a -> Bool
• 型クラスは「型の振る舞いを定義」
• Eqクラス…等価評価
• Ordクラス…大小比較
• Showクラス…文字列表現
• Numクラス…数
• とかとか
型定義
型定義
• dataキーワード
• data Bool = False | True
• data Int = -2147483648 | .. | -1 | 0 | 1 | 2 | .. |2147483647
※実際は違います
データ型
• ex)長方形と円の図形の型を定義
data Shape = Circle Float Float Float |
Rectangle Float Float Float Float
deriving (Show)
データ型
• ex)長方形と円の図形の型を定義
data Shape = Circle Float Float Float |
Rectangle Float Float Float Float
deriving (Show)
データ型
• Shapeが「型」
• Circle,Rectangleが「値コンストラクタ」
• Circle Float Float Floatが「値」
データ型
• 値コンストラクタは普通の関数
ghci> :t Circle
Circle :: Float -> Float -> Float -> Shape
値を使う
• 値を作り出す
ghci> let maru = Circle 1.0 4.0 9.0
ghci> maru
Circle 1.0 4.0 9.0
値を使う
• 面積を返す関数
area :: Shape -> Float
area (Circle _ _ r) = pi*r^2
area (Rectangle x1 y1 x2 y2) = (abs $ x2-x1)*(abs $ y2-y1)
ghci> area maru
254.46901
deriving
• 型を表示したい時はderiving(詳細は後で)
data Shape = Circle Float Float Float |
Rectangle Float Float Float Float
deriving (Show)
レコード構文
• ex)人物を表す型を定義
data Person = Person { name :: String
, age :: Int
} deriving(Show)
レコード構文
• 今までのデータ型と違い,フィールドを取得す
る関数も生成される
ghci> :t name
name :: Person -> String
レコード構文
• 値を作る際は順番は関係なし
ghci> let maeken = Person{age = 20,name="maeken"}
ghci> maeken
Person {name = "maeken", age = 20}
ghci> name maeken
"maeken"
型引数
• 複数の型を受け取ることが可能
• 受け取るものを型コンストラクタと呼ぶ
data Maybe a = Nothing | Just a
↑
型引数
型コンストラクタ
↓
型引数
• Maybeは型引数aがあるので多相的であると言う
• 他にもリスト[a]やEither a b等
型引数
• ex)三次元ベクトルの型を定義
data Vector a = Vector a a a deriving(Show)
型引数
• 型引数 aは数字を受け取りたい(Int,Float..)
vplus :: (Num a) => Vector a -> Vector a -> Vector a
(Vector i j k) `vplus` (Vector l m n) = Vector (i+l) (j+m) (k+n)
言葉おさらい
• data Maybe a = Nothing | Just a
^^^^^^^^^
型
^^^^^^^^^^
値
^^^^^^^^
値
型コンストラクタ
↓
値コンストラクタ
↓
言葉おさらい
• data Maybe a = Nothing | Just a
^^^^^^^^^
型
^^^^^^^^^^
値
^^^^^^^^
値
型コンストラクタ
↓
値コンストラクタ
↓
インスタンス自動導出
• derivingでその型を自動的に指定した型クラスの
インスタンスにする
data Day = Monday | Tuesday | Wednesday | Thursday |
Friday | Saturday | Sunday
deriving (Eq,Ord,Show,Read,Bounded,Enum)
Showクラス
• Showインスタンスは文字列に変換が可能
ghci> Wednesday
Wednesday
ghci> show Wednesday
“Wednesday"
Readクラス
• Readインスタンスは文字列から変換が可能
ghci> read "Wednesday" :: Day
Wednesday
Eqクラス
• Eqインスタンスは等しいかどうかが可能
ghci> Saturday == Sunday
False
ghci> Saturday /= Sunday
True
Ordクラス
• Ordインスタンスは比較が可能
• 先に定義されてるほうが小さいとされる
ghci> Saturday > Friday
True
ghci> Monday `compare` Wednesday
LT
Boundedクラス
• Boundedインスタンスは上限下限の取得が可能
ghci> minBound :: Day
Monday
ghci> maxBound :: Day
Sunday
Enumクラス
• Enumインスタンスは要素の列を列挙可能
ghci> succ Monday
Tuesday
ghci> [Thursday .. Sunday]
[Thursday,Friday,Saturday,Sunday]
型シノニム
型シノニム
• 型に別名を与える
• String = [Char]は実は型シノニム
型シノニム
• typeキーワード
type PhoneBook = [(String,String)]
型シノニム
• 電話帳の型の型シノニムを定義
type PhoneNumber = String
type Name = String
type PhoneBook = [(String,String)]
再帰データ構造
再度おさらい
• data Maybe a = Nothing | Just a
^^^^^^^^
型
^^^^^^^^^^
値
^^^^^^^^
値
型コンストラクタ
↓
値コンストラクタ
↓
再度おさらい
• data Maybe a = Nothing | Just a
aには型が入る
↓
aは型引数
↓
再度おさらい
• data Maybe a = Nothing | Just a
aには型が入る
↓
↑
自分自身の型が入ると..?
再帰データ構造
• 独自のリスト型を定義
data List a = Empty | Cons a (List a)
deriving(Show,Read,Eq,Ord)
再帰データ構造
• 実際のリストとの比較
ghci> Empty
Empty
ghci> 4 `Cons` (5 `Cons` Empty)
Cons 4 (Cons 5 Empty)
ghci> []
[]
ghci> 4 : (5 : [])
[4,5]
演算子
• Consを中置換数に
• infixrで結合性を宣言.infixr 7 *,infixr 6 +等
infixr 5 :-:
data List a = Empty | :-: a (List a)
deriving(Show,Read,Eq,Ord)
演算子
• リストを結合する演算子を定義
infixr 5 ^++
(^++) :: List a -> List a -> List a
Empty ^++ ys = ys
(x :-: xs) ^++ ys = x :-: (xs ^++ ys)
ツリー構造
• ツリー構造を定義
data Nodes a = Node (Nodes a) (Nodes a) | Leaf a
deriving (Show)
ツリー構造
• 深さ優先でリスト化
flatten :: Nodes a -> [a]
flatten (Node s t) = (flattenT s)++(flattenT t)
flatten (Leaf x) = [x]
型クラス
型クラス
• 型クラスは特定の振る舞いを定義する
• ある型Tがある型クラスCのインスタンスである
とは,型クラスCが定義する関数を型Tに対して
使えるという事
• ※オブジェクト指向で言うクラスとは違うので注意
型クラス内部
• 例)Eq型クラス
class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
x == y = not (x /= y)
x /= y = not (x == y)
型クラス内部
• aは型変数.将来Eqのインスタンスとなる
class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
x == y = not (x /= y)
x /= y = not (x == y)
インスタンスを作る
• Eqのインスタンスを手動で生成
data TrafficLight = Red | Yellow | Green
instance Eq TrafficLight where
Red == Red = True
Green == Green = True
Yellow == Yellow = True
_ == _ = False
インスタンスを作る
• 型変数aに具体的な型が入っている
class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
x == y = not (x /= y)
x /= y = not (x == y)
instance Eq TrafficLight where
Red == Red = True
Green == Green = True
Yellow == Yellow = True
_ == _ = False
インスタンスを作る
• Showのインスタンスを手動で生成
instance Show TrafficLight where
show Red = "Red light"
show Yellow = "Yellow light"
show Green = "Green light"
インスタンスを作る
ghci> Red
Red light
ghci> Red == Red
True
ghci> [Red,Green,Yellow]
[Red light,Green light,Yellow light]
サブクラス化
• 例)Num型クラス
• 「ある型をNumのインスタンスにしたかったら
その前にEqのインスタンスにする必要がある」
class (Eq a) => Num a where
…
多相型の注意
• MaybeをEqのインスタンスにする場合
• 下記はまちがい.Maybeは型ではなく型コンス
トラクタ
instance Eq Maybe where
Just x == Just y = x == y
Nothing == Nothing = True
_ == _ = False
多相型の注意
• まだまちがい
• Maybeの中身に対して==を使っている
• つまりmはEqに属してないといけない
instance Eq (Maybe m) where
Just x == Just y = x == y
Nothing == Nothing = True
_ == _ = False
多相型の注意
• せいかい
instance (Eq m) => Eq (Maybe m) where
Just x == Just y = x == y
Nothing == Nothing = True
_ == _ = False
型クラスを作る
• JavaScriptの真理値を実装する
if(0) alert("Yes!") else alert("No!")
if("") alert("Yes!") else alert("No!")
if(false) alert("Yes!") else alert("No!")
⇛すべて"No!"が返る
型クラスを作る
• YesNo型クラスを定義
class YesNo a where
yesno :: a -> Bool
YesNoインスタンス
• Int
• リスト
• Bool
instance YesNo Int where
yesno 0 = False
yesno _ = True
instance YesNo [a] where
yesno [] = False
yesno _ = True
instance YesNo Bool where
yesno = id
YesNoインスタンス
• Maybe
• TrafficLight
instance YesNo (Maybe a) where
yesno (Just _) = True
yesno Nothing = False
instance YesNo TrafficLight where
yesno Red = False
yesno _ = True
YesNoインスタンス
• 早速遊んでみる
ghci> yesno []
False
ghci> yesno "aaa"
True
ghci> yesno (Just 0)
True
ghci> yesno Red
False
ghci> :t yesno
yesno :: YesNo a => a -> Bool
YesNoインスタンス
• ついでに関数も作る
yesnoIf :: (YesNo y) => y -> a -> a -> a
yesnoIf yesnoVal yesResult noResult =
if yesno yesnoVal
then yesResult
else noResult
YesNoインスタンス
ghci> yesnoIf [] "yes!" "no!"
"no!"
ghci> yesnoIf "0" "yes!" "no!"
"yes!"
ghci> yesnoIf True "yes!" "no!"
"yes!"
ghci> yesnoIf Nothing "yes!" "no!"
"no!"
Functor
Functor型クラス
• Functorは「全体を写す」ものの型クラス
• リストのmapも写す操作をする
• →リストはFunctor
Functor型クラス
• Functor型クラス実装を見る
class Functor f where
fmap :: (a -> b) -> f a -> f b
Functor型クラス
• fは具体型ではなく型コンストラクタ
• fmapは,「ある型aから別の型bへの関数」と「あ
る型aに適用されたファンクター値」を取り,「別
の型bへ適用されたファンクター値」を返す関数
と読める
( ゚д゚)
mapとfmap
• 実はmapはfmapのリスト版
• mapは「型aから型bへの関数」と「型aのリスト」
を受け取り,「型bのリスト」を返す
map :: (a -> b) -> [a] -> [b]
fmap :: (a -> b) -> f a -> f b
MaybeもFunctor?
• Functorは箱のような働きをすると考えられる
• fmapは箱の中身に対して関数を適用する
• Maybeも箱のようなもの…?
MaybeもFunctor
• Maybe型はFanctorなのでfmap可能
instance Functor Maybe where
fmap f (Just x) = Just (f x)
fmap Nothing = Nothing
NodesもFunctor
• Nodes型にもfmap可能.インスタンスは下記.
instance Functor Nodes where
fmap f (Leaf a) = (Leaf (f a))
fmap f (Node left right)
= Node (fmap f left) (fmap f right)
Functorで遊ぶ
ghci> fmap (+5) (Just 4)
Just 9
ghci> fmap (++"!") (Just "maeken")
Just “maeken!"
ghci> let x=Node (Node (Leaf 1) (Node (Leaf 2) (Leaf 4))) (Leaf 3)
ghci> fmap (*2) x
Node (Node (Leaf 2) (Node (Leaf 4) (Leaf 8))) (Leaf 6)
練習問題
考え中
次回予告
Hello World

More Related Content

What's hot

What's hot (11)

すごいHaskell読書会 第7章 (前編)
すごいHaskell読書会 第7章 (前編)すごいHaskell読書会 第7章 (前編)
すごいHaskell読書会 第7章 (前編)
 
Ruby 3の型推論やってます
Ruby 3の型推論やってますRuby 3の型推論やってます
Ruby 3の型推論やってます
 
Haskell勉強会 in ie
Haskell勉強会 in ieHaskell勉強会 in ie
Haskell勉強会 in ie
 
Pythonintro
PythonintroPythonintro
Pythonintro
 
Lisp講義1
Lisp講義1Lisp講義1
Lisp講義1
 
Haskell Lecture 2
Haskell Lecture 2Haskell Lecture 2
Haskell Lecture 2
 
(Lambdaだけで) 純LISPのような ナニかを作る
(Lambdaだけで)純LISPのようなナニかを作る(Lambdaだけで)純LISPのようなナニかを作る
(Lambdaだけで) 純LISPのような ナニかを作る
 
すごいHaskell 第7章 型や型クラスを自分で作ろう(前編)
すごいHaskell 第7章 型や型クラスを自分で作ろう(前編)すごいHaskell 第7章 型や型クラスを自分で作ろう(前編)
すごいHaskell 第7章 型や型クラスを自分で作ろう(前編)
 
すごいHaskell読書会
すごいHaskell読書会すごいHaskell読書会
すごいHaskell読書会
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 
すごい配列楽しく学ぼう
すごい配列楽しく学ぼうすごい配列楽しく学ぼう
すごい配列楽しく学ぼう
 

Viewers also liked

Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
 

Viewers also liked (13)

Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
よくわかるCoqプログラミング
よくわかるCoqプログラミングよくわかるCoqプログラミング
よくわかるCoqプログラミング
 
SDNを導入してみて思った事
SDNを導入してみて思った事SDNを導入してみて思った事
SDNを導入してみて思った事
 
機械学習によるリモートネットワークの異常検知
機械学習によるリモートネットワークの異常検知機械学習によるリモートネットワークの異常検知
機械学習によるリモートネットワークの異常検知
 
VPP事始め
VPP事始めVPP事始め
VPP事始め
 
ネットワーク運用とIoT
ネットワーク運用とIoTネットワーク運用とIoT
ネットワーク運用とIoT
 
物理ネットワーク受け入れテストの自動化を考える
物理ネットワーク受け入れテストの自動化を考える物理ネットワーク受け入れテストの自動化を考える
物理ネットワーク受け入れテストの自動化を考える
 
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続
 
ゼロからはじめるプロダクトマネージャー生活
ゼロからはじめるプロダクトマネージャー生活ゼロからはじめるプロダクトマネージャー生活
ゼロからはじめるプロダクトマネージャー生活
 
スタディサプリを支えるデータ分析基盤 ~設計の勘所と利活用事例~
スタディサプリを支えるデータ分析基盤 ~設計の勘所と利活用事例~スタディサプリを支えるデータ分析基盤 ~設計の勘所と利活用事例~
スタディサプリを支えるデータ分析基盤 ~設計の勘所と利活用事例~
 
ハードテック スタートアップのトレンド (2016 年版)
ハードテック スタートアップのトレンド (2016 年版)ハードテック スタートアップのトレンド (2016 年版)
ハードテック スタートアップのトレンド (2016 年版)
 
OSS についてあれこれ
OSS についてあれこれOSS についてあれこれ
OSS についてあれこれ
 
Googleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOpsGoogleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOps
 

Similar to Haskell勉強会2 in ie

こんなEqualsは嫌だ
こんなEqualsは嫌だこんなEqualsは嫌だ
こんなEqualsは嫌だ
Oda Shinsuke
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
Haruka Ozaki
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
Prunus 1350
 
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
yashigani
 

Similar to Haskell勉強会2 in ie (20)

こんなEqualsは嫌だ
こんなEqualsは嫌だこんなEqualsは嫌だ
こんなEqualsは嫌だ
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
 
Python opt
Python optPython opt
Python opt
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
 
 
  
 
 
Phantom Type in Scala
Phantom Type in ScalaPhantom Type in Scala
Phantom Type in Scala
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
 
20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift
 
Python勉強会3-コレクションとファイル
Python勉強会3-コレクションとファイルPython勉強会3-コレクションとファイル
Python勉強会3-コレクションとファイル
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web games
 
すごい Haskell 読書会 in 大阪 #5
すごい Haskell 読書会 in 大阪 #5すごい Haskell 読書会 in 大阪 #5
すごい Haskell 読書会 in 大阪 #5
 
Equality in Scala (ScalaMatsuri 2020)
Equality in Scala (ScalaMatsuri 2020)Equality in Scala (ScalaMatsuri 2020)
Equality in Scala (ScalaMatsuri 2020)
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
 
演習:プログラミング言語処理をやってみよう (ver.1.01)
演習:プログラミング言語処理をやってみよう (ver.1.01)演習:プログラミング言語処理をやってみよう (ver.1.01)
演習:プログラミング言語処理をやってみよう (ver.1.01)
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
 
Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】
 

Recently uploaded

Recently uploaded (12)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

Haskell勉強会2 in ie