SlideShare uma empresa Scribd logo
1 de 39
Real World OCaml読んでみた感想

Lisp Meet Up Presented by Shibuya.lisp #14
κeen(@blackenedgold)
#lispmeetup
2014-02-26
自己紹介
●

Twitter: κeen(@blackenedgold)

●

Github: KeenS

●

ブログ: κeenのHappy Hacκing Blog

●

東大数学科の三年生

●

就活中!

●

Lisp, Ruby, シェルスクリプトが好き

●

CIMの開発してます
話の流れ
●

OCamlと周りの環境の紹介(軽く)

●

Real World OCamlの紹介

●

OCamlの機能をLispに取り込んでみた ボツ編

●

OCamlの機能をLispに取り込んでみた
OCamlと周りの環境
の紹介
OCamlについて
名古屋の方は黙って見てて下さい

ML方言のCamlにオブジェクト指向を加えたもの
● 強い静的片付け
● 強力な型推論
● フランスのINRIA研究所で開発されている
●
OCamlについて
名古屋の方は黙って見てて下さい

●

関数型

●

値は基本変更不可

●

関数はカリー化されている
OCaml

サンプルコード

let rec quicksort = function
| [] -> []
| pivot :: rest ->
let is_less x = x < pivot in
let left, right = List.partition is_less rest in
quicksort left @ [pivot] @ quicksort right

Racket
(define quicksort
(match-lambda
['() '()]
[(cons pivot rest)
(let ([lessp (lambda (x) (< x pivot))])
(let-values ([(left right) (partition lessp rest)])
(append (quicksort left) (list pivot) (quicksort right))))]))
OCaml

サンプルコード

再帰関数定義

リストリテラル

let rec quicksort = function
コンス演算子によるマッチング
| [] -> []
| pivot :: rest ->
let is_less x = x < pivot in
let left, right = List.partition is_less ローカル関数定義
rest in
quicksort left @ [pivot] @ quicksort right

Racket

タプルリテタルによる
(define quicksort
変数の分配束縛

モジュール関数呼び出し

(match-lambda
['() '()]
append演算子
[(cons pivot rest)
(let ([lessp (lambda (x) (< x pivot))])
(let-values ([(left right) (partition lessp rest)])
(append (quicksort left) (list pivot) (quicksort right))))]))
OCamlをとりまく環境
●

Jane Streetという金融会社が業務で使用

●

標準ライブラリにツッコみどころがある
–
–

●

Jane StreetのライブラリCoreで補う
標準ライブラリを上書きしてる

ライブラリマネージャ、バージョンマネージャ完
備

●

推奨エディタがEmacs

●

日本だと名古屋が拠点
Real World OCamlの紹介
Real World OCamlの紹介
http://realworldocaml.org
● ベータ版は↑から無料で読める
● 英語版はオライリーより$44くらい
● 510p (cf. Land of Lispは480p)
● 著者は
OMakeの開発者
XenをOCamlで開発した人
Jane Streetの中の人
●
Real Wold OCamlの紹介
●

Jane StreetのCoreを前提

●

言語の基礎からコンパイラプラグインまで

●

●

プログラミングの知識はあるが関数型は初めて
の人対象
一冊読めば入門からReal Worldまでいけると思
います
目次
●

はじめに

●

第1部 言語の概念

●

1 マップ及びハッシュテーブル
3.
1 コマンドラインのパース
4.

1 ひとめぐり
.

15.
JSONデータの扱い

2. 変数と関数

16.
OCamllex及びMenhirによるパース

3. リストとパターン

17.
S式によるデータシリアライゼーション

4. ファイル、モジュール、プログラム
5. レコード

18.
Asyncによる並行プログラミング
●

6. バリアント

第3部 ランタイムシステム
1 外部関数の呼出し(FFI)
9.

7. エラーハンドリング

20.
値のメモリ表現

8. 命令型プログラミング

21
ガーベジコレクタを理解する
.

9. ファンクタ

22.
コンパイラフロントエンド:パース及び
型チェック

1 第一級​モジュール
0.

23.
コンパイラバックエンド:バイトコード
及びネイティブコード

1 .オブジェクト
1
1 クラス
2.

第2部 ツール及びテクニック

●

索引
目次
●

はじめに

●

第1部 言語の概念

●

1 マップ及びハッシュテーブル
3.
1 コマンドラインのパース
4.

1 ひとめぐり
.

15.
JSONデータの扱い

2. 変数と関数

16.
OCamllex及びMenhirによるパース

3. リストとパターン

17.
S式によるデータシリアライゼーション

4. ファイル、モジュール、プログラム
5. レコード

18.
Asyncによる並行プログラミング
●

6. バリアント

第3部 ランタイムシステム
1 外部関数の呼出し(FFI)
9.

7. エラーハンドリング

20.
値のメモリ表現

8. 命令型プログラミング

21
ガーベジコレクタを理解する
.

9. ファンクタ

22.
コンパイラフロントエンド:パース及び
型チェック

1 第一級​モジュール
0.

23.
コンパイラバックエンド:バイトコード
及びネイティブコード

1 .オブジェクト
1
1 クラス
2.

第2部 ツール及びテクニック

●

索引
ボツ編
モジュール分割
let rec quicksort = function
| [] -> []
| pivot :: rest ->
let is_less x = x < pivot in
let left, right = List.partition is_less rest in
quicksort left @ [pivot] @ quicksort right
モジュール分割
let rec quicksort = function
| [] -> []
| pivot :: rest ->
let is_less x = x < pivot in
let left, right = List.partition is_less rest in
quicksort left @ [pivot] @ quicksort right

List.map
Array.map
String.map
…など
モジュール分割
原案

(list:map #'1+ '(1 2 3)) ;=> (1 2 3)
(vector:map #'1+ #(1 2 3)) ;=> #(2 3 4)
(string:map (lambda (x) (code-char (1+(char-code x))))
"abc")
;=> "bcd"
モジュール分割
原案

(list:map #'1+ '(1 2 3)) ;=> (1 2 3)
(vector:map #'1+ #(1 2 3)) ;=> #(2 3 4)
(string:map (lambda (x) (code-char (1+(char-code x))))
"abc")
;=> "bcd"
CLer「名前空間は機能を分割するためのもので型を
ディスパッチするものではない」
CLer「ハンガリアン記法で区別可能。よって却下」
モジュール分割
原案

(list:map #'1+ '(1 2 3)) ;=> (1 2 3)
(vector:map #'1+ #(1 2 3)) ;=> #(2 3 4)
(string:map (lambda (x) (code-char (1+(char-code x))))
"abc")
;=> "bcd"
CLer「名前空間は機能を分割するためのもので型を
ディスパッチするものではない」
CLer「ハンガリアン記法で区別可能。よって却下」

ボツ
local use-package
let average x y =
x Int64.(+) y Int64.(/) Int64.of_int 2;;
open Int64;;
let average x y =
x + y / of_int 2;;
let average x y =
let open Int64 in
x + y / of_int 2;;
let average x y =
let module I = Int64 in
x I.(+) y I.(/) I.of_int 2;;
local use-package
(defun average (x y)
let average x y =
(int64:/ (int64:+ x y)
x Int64.(+) y Int64.(/) Int64.of_int 2;;
(int64:of-int 2)))

open Int64;;
let average x y =
x + y / of_int 2;;
let average x y =
let open Int64 in
x + y / of_int 2;;
let average x y =
let module I = Int64 in
x I.(+) y I.(/) I.of_int 2;;

(use-package :int64)
(defun average (x y)
(/ (+ x y) (of-int 2)))
local use-package
(defun average (x y)
let average x y =
(int64:/ (int64:+ x y)
x Int64.(+) y Int64.(/) Int64.of_int 2;;
(int64:of-int 2)))

open Int64;;
let average x y =
x + y / of_int 2;;

(use-package :int64)
(defun average (x y)
(/ (+ x y) (of-int 2)))

(defun average (x y)
let average x y =
(with-use-packages (:int64)
let open Int64 in
(/ (+ x y) (of-int 2))))
x + y / of_int 2;;
let average x y =
(defun average (x y)
(with-package-nicknames
let module I = Int64 in
x I.(+) y I.(/) I.of_int 2;; ((i int64))
(i:/ (i:+ x y) (i:of-int 2))))
local use-package
●

シンボルの解決はリード時

●

マクロの展開はコンパイル時
local use-package
●

シンボルの解決はリード時

●

マクロの展開はコンパイル時

オワタ(^o^)/
local use-package
●

シンボルの解決はリード時

●

マクロの展開はコンパイル時

オワタ(^o^)/
ボツ
普通編
Variantとパターンマッチ
let rec quicksort = function
| [] -> []
| pivot :: rest ->
let is_less x = x < pivot in
let left, right = List.partition is_less rest in
quicksort left @ [pivot] @ quicksort right

type 'a list = 'a :: 'a list | []
Variantとパターンマッチ
let rec quicksort = function
| [] -> []
コンパイルエラー
| pivot :: rest ->
let is_less x = x < pivot in
let left, right = List.partition is_less rest in
quicksort left @ [pivot] @ quicksort right

type 'a list = 'a :: 'a list | []
Variantとパターンマッチ
let rec quicksort = function
コンパイルエラー
| left , right -> left :: [right]
| [] -> []
| pivot :: rest ->
let is_less x = x < pivot in
let left, right = List.partition is_less rest in
quicksort left @ [pivot] @ quicksort right

type 'a list = 'a :: 'a list | []
Common Lispでやってみる
パターンマッチはoptimaがある
型を(defstruct)で一々定義するのは面倒
(defvariant)的な何かを…
Common Lispでやってみる
パターンマッチはoptimaがある
型を(defstruct)で一々定義するのは面倒
(defvariant)的な何かを…

やってみました
Common Lispでやってみた
赤黒木の例
type 'a tree =
| Leaf
| Red of tree * 'a * tree
| Black of tree * 'a * tree
(defvariant tree
leaf
(red tree t tree)
(black tree t tree))
gist https://gist.github.com/9225141 にサンプルコードあります
Common Lispでやってみた
赤黒木の例
type 'a tree =
| Leaf
| Red of tree * 'a * tree
| Black of tree * 'a * tree
(defvariant tree
leaf
(red tree t tree)
(black tree t tree))

(PROGN
(DEFTYPE TREE () '(OR (MEMBER LEAF) BLACK RED))
(DEFSTRUCT
(BLACK (:CONSTRUCTOR BLACK (#:TREE1014 #:T1015
#:TREE1016))
(:PRINT-OBJECT
(LAMBDA (OBJ STREAM)
(FORMAT STREAM "(~a ~{~a~^ ~})" 'BLACK
(LIST-SLOTS OBJ '(#:TREE1014 #:T1015 #:TREE1016)
(FORMAT NIL "~a-" 'BLACK))))))
(#:TREE1014 NIL :TYPE TREE)
(#:T1015 NIL :TYPE T)
(#:TREE1016 NIL :TYPE TREE))
(DEFPATTERN BLACK
(#:TREE1014 #:T1015 #:TREE1016)
(LIST 'BLACK- :TREE1014 #:TREE1014 :T1015 #:T1015 :TREE1016
#:TREE1016))
(DEFSTRUCT
(RED (:CONSTRUCTOR RED (#:TREE1017 #:T1018 #:TREE1019))
(:PRINT-OBJECT
(LAMBDA (OBJ STREAM)
(FORMAT STREAM "(~a ~{~a~^ ~})" 'RED
(LIST-SLOTS OBJ '(#:TREE1017 #:T1018 #:TREE1019)
(FORMAT NIL "~a-" 'RED))))))
(#:TREE1017 NIL :TYPE TREE)
(#:T1018 NIL :TYPE T)
(#:TREE1019 NIL :TYPE TREE))
(DEFPATTERN RED
(#:TREE1017 #:T1018 #:TREE1019)
(LIST 'RED- :TREE1017 #:TREE1017 :T1018 #:T1018 :TREE1019
#:TREE1019)))

gist https://gist.github.com/9225141 にサンプルコードあります
Common Lispでやってみた
やってること
●

型の定義

●

構造体の定義

●

プリティプリント

●

コンストラクタの定義

●

●

構造体のスロットの型制
限
optimaのパターン定義

できなかったこと
●

match節が必要十分
でないときのエラー
|>
let (|>) data f = f data;;

()で囲まれてるのは中置演算子
● 関数適用より優先度が低い
● 左結合
●
|>
let (|>) data f = f data;;

()で囲まれてるのは中置演算子
● 関数適用より優先度が低い
● 左結合
●

# String.split ~on:':' "/usr/bin:/usr/local/bin:/bin:/sbin"
|> List.dedup ~compare:String.compare
|> List.iter ~f:print_endline
;;
/bin
/sbin
/usr/bin
/usr/local/bin

unixのパイプみたいに使える!
Lispでやってみた
Clojure
->>がある
Common Lisp
(defmacro ->> (data &rest funs)
(reduce (lambda (x y)
`(funcall ,y ,x)) funs
:initial-value data))
Scheme
(define (->> data . funs)
(fold (lambda (x y) (x y)) data funs))
以上

質問あればどうぞ

Mais conteúdo relacionado

Mais procurados

Material
MaterialMaterial
Material_TUNE_
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~Nobuhisa Koizumi
 
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Masahiro Sakai
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書くHideyuki Tanaka
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門Eita Sugimoto
 
すごいH 第12章モノイド
すごいH 第12章モノイドすごいH 第12章モノイド
すごいH 第12章モノイドShinta Hatatani
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたKazuyuki TAKASE
 
Introduction to Categorical Programming
Introduction to Categorical ProgrammingIntroduction to Categorical Programming
Introduction to Categorical ProgrammingMasahiro Sakai
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたってTsuyoshi Matsudate
 
モナドがいっぱい!
モナドがいっぱい!モナドがいっぱい!
モナドがいっぱい!Kenta Sato
 
関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へHiro H.
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナドKousuke Ruichi
 
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみようC++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみようHiro H.
 
Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPyShiqiao Du
 
Python勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージPython勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージ理 小林
 
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」Hiro H.
 
Freer Monads, More Extensible Effects
Freer Monads, More Extensible EffectsFreer Monads, More Extensible Effects
Freer Monads, More Extensible EffectsHiromi Ishii
 

Mais procurados (20)

Material
MaterialMaterial
Material
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
Lisp講義1
Lisp講義1Lisp講義1
Lisp講義1
 
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
 
すごいH 第12章モノイド
すごいH 第12章モノイドすごいH 第12章モノイド
すごいH 第12章モノイド
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
 
Introduction to Categorical Programming
Introduction to Categorical ProgrammingIntroduction to Categorical Programming
Introduction to Categorical Programming
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
モナドがいっぱい!
モナドがいっぱい!モナドがいっぱい!
モナドがいっぱい!
 
関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
 
Emcjp item33,34
Emcjp item33,34Emcjp item33,34
Emcjp item33,34
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナド
 
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみようC++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
 
Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPy
 
Python勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージPython勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージ
 
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
 
Freer Monads, More Extensible Effects
Freer Monads, More Extensible EffectsFreer Monads, More Extensible Effects
Freer Monads, More Extensible Effects
 

Destaque

CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとしたCL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとしたblackenedgold
 
OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法Hiroki Mizuno
 
Common Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろうCommon Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろうblackenedgold
 
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~Kazuhiro Hishinuma
 
Writing a fast HTTP parser
Writing a fast HTTP parserWriting a fast HTTP parser
Writing a fast HTTP parserfukamachi
 
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxeオブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxeterurou
 
O caml2014 leroy-slides
O caml2014 leroy-slidesO caml2014 leroy-slides
O caml2014 leroy-slidesOCaml
 
ZDD基礎
ZDD基礎ZDD基礎
ZDD基礎reew2n
 
Integral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common LispIntegral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common Lispfukamachi
 
ZDDでSATを解く
ZDDでSATを解くZDDでSATを解く
ZDDでSATを解くgotoloop
 
Using functional programming within an industrial product group: perspectives...
Using functional programming within an industrial product group: perspectives...Using functional programming within an industrial product group: perspectives...
Using functional programming within an industrial product group: perspectives...Anil Madhavapeddy
 
Camomile : A Unicode library for OCaml
Camomile : A Unicode library for OCamlCamomile : A Unicode library for OCaml
Camomile : A Unicode library for OCamlYamagata Yoriyuki
 
Mirage: ML kernels in the cloud (ML Workshop 2010)
Mirage: ML kernels in the cloud (ML Workshop 2010)Mirage: ML kernels in the cloud (ML Workshop 2010)
Mirage: ML kernels in the cloud (ML Workshop 2010)Anil Madhavapeddy
 
Introduction to functional programming using Ocaml
Introduction to functional programming using OcamlIntroduction to functional programming using Ocaml
Introduction to functional programming using Ocamlpramode_ce
 

Destaque (20)

CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとしたCL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
 
Lispmeetup11
Lispmeetup11Lispmeetup11
Lispmeetup11
 
OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法
 
Common Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろうCommon Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろう
 
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
 
Writing a fast HTTP parser
Writing a fast HTTP parserWriting a fast HTTP parser
Writing a fast HTTP parser
 
計算数学
計算数学計算数学
計算数学
 
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxeオブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
 
O caml2014 leroy-slides
O caml2014 leroy-slidesO caml2014 leroy-slides
O caml2014 leroy-slides
 
ZDD基礎
ZDD基礎ZDD基礎
ZDD基礎
 
大規模グラフの数え上げ
大規模グラフの数え上げ大規模グラフの数え上げ
大規模グラフの数え上げ
 
Integral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common LispIntegral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common Lisp
 
ZDDでSATを解く
ZDDでSATを解くZDDでSATを解く
ZDDでSATを解く
 
A taste of Functional Programming
A taste of Functional ProgrammingA taste of Functional Programming
A taste of Functional Programming
 
Using functional programming within an industrial product group: perspectives...
Using functional programming within an industrial product group: perspectives...Using functional programming within an industrial product group: perspectives...
Using functional programming within an industrial product group: perspectives...
 
Camomile : A Unicode library for OCaml
Camomile : A Unicode library for OCamlCamomile : A Unicode library for OCaml
Camomile : A Unicode library for OCaml
 
Ocaml
OcamlOcaml
Ocaml
 
Mirage: ML kernels in the cloud (ML Workshop 2010)
Mirage: ML kernels in the cloud (ML Workshop 2010)Mirage: ML kernels in the cloud (ML Workshop 2010)
Mirage: ML kernels in the cloud (ML Workshop 2010)
 
Introduction to functional programming using Ocaml
Introduction to functional programming using OcamlIntroduction to functional programming using Ocaml
Introduction to functional programming using Ocaml
 
Haskell - Functional Programming
Haskell - Functional ProgrammingHaskell - Functional Programming
Haskell - Functional Programming
 

Semelhante a Real World OCamlを読んでLispと協調してみた

20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swiftnecocen
 
Common LispでGPGPU
Common LispでGPGPUCommon LispでGPGPU
Common LispでGPGPUgos-k
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit ScalaKota Mizushima
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Ransui Iso
 
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへNaoki Kitora
 
Rubyの拡張をCrystalで書いてみる
Rubyの拡張をCrystalで書いてみるRubyの拡張をCrystalで書いてみる
Rubyの拡張をCrystalで書いてみる5t111111
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Ra Zon
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~Takuya Akiba
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーmganeko
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
データとは何か
データとは何かデータとは何か
データとは何かKenta Suzuki
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜Hiromi Ishii
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニックGenya Murakami
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Ransui Iso
 
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 HyのすすめLispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 HyのすすめSatoshi imai
 

Semelhante a Real World OCamlを読んでLispと協調してみた (20)

What is Metasepi?
What is Metasepi?What is Metasepi?
What is Metasepi?
 
20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift
 
Common LispでGPGPU
Common LispでGPGPUCommon LispでGPGPU
Common LispでGPGPU
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit Scala
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
 
Rubyの拡張をCrystalで書いてみる
Rubyの拡張をCrystalで書いてみるRubyの拡張をCrystalで書いてみる
Rubyの拡張をCrystalで書いてみる
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
HPC Phys-20201203
HPC Phys-20201203HPC Phys-20201203
HPC Phys-20201203
 
データとは何か
データとは何かデータとは何か
データとは何か
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニック
 
Lispでやる記号微分
Lispでやる記号微分Lispでやる記号微分
Lispでやる記号微分
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
 
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 HyのすすめLispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
 

Último

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Último (9)

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

Real World OCamlを読んでLispと協調してみた