SlideShare a Scribd company logo
OCaml勉強会@axsh(はじめのいっぽ)Id:s1061123
OcamlとはOcaml = Objective Camlの略
Ocaml lecture slides 01 at axsh
公式ページにOcamlって書いてない!!!公式ページはhttp://caml.inria.fr/index.en.htmlです.
Objective Caml勉強会@axsh(はじめのいっぽ)Id:s1061123
OcamlObjective CamlとはObjective Caml= Caml言語のObject拡張版CamlとはフランスのINRIAという研究所で開発された関数型言語で↓等々を供えた言語型システム(型推論・多相型)パターンマッチングOcamlはそれに↓を追加した言語モジュールシステムオブジェクト機能Native Compiler(ネイティブバイナリ吐ける!)
Objective Camlの親戚一覧ML系列 (Objective Camlと同類)F# (for .Net) http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/default.aspxStandard ML of New Jersey (SML/nj) http://www.smlnj.org/ Alice http://www.ps.uni-saarland.de/alice/SML# http://www.pllab.riec.tohoku.ac.jp/smlsharp/ja/HaskellClosureConcurrent CleanLisp/scheme
特徴型推論があるので(ある程度)プログラムのエラーを静的に解析できるパターンマッチによって複雑な条件式が簡潔に書ける高階関数(Higher Order Function)や多相型(Polymorphic Type)によってより柔軟な処理の記述が可能
最終的なGoalOcamlのプログラムのコンパイルの仕方,実行方法が分かるようになる関数型言語の知識が(少し)分かるようになる(型推論とか,パターンマッチングとか…)関数型言語っぽいプログラミングのマナーを知る(再帰脳・リスト指向・高階関数使用)
目次データ構造体
リスト・ペア
レコード
バリアント
パターンマッチ
再帰
多相型について
多相型関数
多相型データインストール“Hello world!”プログラムの起動・終了プログラムの解説その他型について関数関数定義条件分岐再帰
インストールWindows: Cygwin/MinGW/MSのどちからを選択.違いはビルド環境ライブラリ,生成コードのインターフェイスに違い詳しくは公式ページ(http://caml.inria.fr/ocaml/portability.en.html)ちなみに僕はMinGWをよくインストールしますTcl/Tk(Active TCL)をインストールすると吉Object Browser(リファレンス)が使えますOcamlベースのF#をインストールするというのも…
インストールMac: Intel版を公式サイトからダウンロードMacPortsからインストールUnix/Linux:ソースから頑張るgccインストールよりは確実に楽ですパッケージはいろいろありますGentoo/Redhat/Debian for LinuxPorts/pkgsrc for *BSD
とりあえずhello world!Nativeバイナリ版はあとで解説しまつWindowsでUnixで
解説kagaribi% ocaml        Objective Caml version 3.10.2# print_string "hello world!";;hello world!- : unit = ()# ^Dkagaribi%プログラムの入力プロンプト出力プログラムの型”^d”で終了
プログラム解説# print_string“hello world!”;;関数名引数ターミネーター引数渡す際にかっこ”()”やコンマ”,”は不要
文字列は””で囲む
プログラムを評価したい場合には”;;”を末尾に
評価については2枚後で説明
print_stringは文字列を受けとって表示する関数プログラム解説hello world!- : unit = ()標準出力プロンプト結果の型返り値Print_stringの結果の表示の後に評価の結果を表示unitというのは型の一つでvoidみたいなもの 型についてはあとで説明“()”はunit型の値他の例# 10 + 20;;- : int = 30#
“評価”とは?与えられたOcaml式をコンピュータが解析すること関数に全ての引数が与えられたら実行kagaribi% ocaml        Objective Caml version 3.10.2# print_string “test string”;;←関数に引数を加えて評価test string- : unit = ()←実行される# 10;;←数字を評価: int = 10←評価の結果は変わらず# print_string;;←関数を評価すると?- : string -> unit = <fun>←関数が返ってくる#
Type, Type, Type!!! (1)型推論する関数型言語にとって型は命ですint	:31bit整数型 (Int32, Int64という型もあります)float	: 不動小数点型 (doubleっぽい)string	: 文字列型  (“test” で表記)char 	: 文字型(‘a’ で表記)bool	: true/falseunit	: 値を返さない型.値は()のみT1 ->T2: 型T1の値を引数でT2の型の値を返す関数の型
Type, Type, Type!!! (2): 例kagaribi% ocaml        Objective Caml version 3.10.2# 10;;- : int = 10# 10.1;;- : float = 10.1# "test";;- : string = "test"# 'a';;- : char = 'a'# true;;- : bool = true# false;;- : bool = false# ();;- : unit = ()# print_string;;- : string -> unit = <fun>
目次データ構造体
リスト・ペア
レコード
バリアント
パターンマッチ
再帰
多相型について
多相型関数
多相型データインストール“Hello world!”プログラムの起動・終了プログラムの解説その他型について関数関数定義条件分岐再帰
関数/条件分岐変数の定義・関数の定義letfoobar = 10;;letfoobar = 15andfoobar2 = 20;;lettestfunc a = print_string “answer is “;print_int (a + 30) ;;lettestfunc a b = a + b;;lettestfun a:int = a;;スコープ付き変数・関数の定義letfoobar = 10 in foobar + 10 ;;名前無し関数(closure)定義	fun a -> a + 10;;	let testfunc a b = a + b;;   ===== let testfunc = fun a b -> a + b;;これは再代入とは違うので注意!!(新規に領域を作って名前をbindしている)連続した命令は”;”で分ける引数の型は明示的にも宣言可
関数/条件分岐条件分岐 let testFunc a b = 	if (a > b) then		a	else 		bIf 式自身も値を返す構文であることに注目そのためにelseは必須
関数/条件分岐If節の中に複数の命令を入れる場合は注意が必要条件分岐 let testFunc a b = 	if (a > b) then		(print_string “a > b”; a)	else 		(print_string “a =< b”; b)括弧の中を左から評価して最後の値を返す注意:最後以外はunitを返さないとwarning()の代わりにbegin … endでもOK

More Related Content

PDF
ゲーム開発者のための C++11/C++14
PDF
C++ Template Meta Programming の紹介@社内勉強会
PDF
templateとautoの型推論
PDF
C++11概要 ライブラリ編
ODP
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
PPTX
PDF
組み込みでこそC++を使う10の理由
PPTX
BoostAsioで可読性を求めるのは間違っているだろうか
ゲーム開発者のための C++11/C++14
C++ Template Meta Programming の紹介@社内勉強会
templateとautoの型推論
C++11概要 ライブラリ編
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
組み込みでこそC++を使う10の理由
BoostAsioで可読性を求めるのは間違っているだろうか

What's hot (20)

PDF
クロージャデザインパターン
PDF
C++ ポインタ ブートキャンプ
PDF
Unity2015_No10_~UGUI&Audio~
PPTX
C++0x総復習
PDF
Effective Modern C++ 勉強会#1 Item3,4
PDF
F#入門 ~関数プログラミングとは何か~
PDF
yieldとreturnの話
PPTX
エラーハンドリング
PPTX
最新C++事情 C++14-C++20 (2018年10月)
PPTX
競技プログラミングのためのC++入門
PPT
C++でHello worldを書いてみた
PDF
C++14 Overview
PDF
すごいConstたのしく使おう!
PPTX
Visual C++で使えるC++11
PDF
モナドハンズオン前座
PDF
C++ Template Metaprogramming
PDF
ちょっと詳しくJavaScript 第3回【prototype】
PPTX
Boost jp9 program_options
PDF
Template Meta Programming入門から応用まで
PDF
Emcpp item31
クロージャデザインパターン
C++ ポインタ ブートキャンプ
Unity2015_No10_~UGUI&Audio~
C++0x総復習
Effective Modern C++ 勉強会#1 Item3,4
F#入門 ~関数プログラミングとは何か~
yieldとreturnの話
エラーハンドリング
最新C++事情 C++14-C++20 (2018年10月)
競技プログラミングのためのC++入門
C++でHello worldを書いてみた
C++14 Overview
すごいConstたのしく使おう!
Visual C++で使えるC++11
モナドハンズオン前座
C++ Template Metaprogramming
ちょっと詳しくJavaScript 第3回【prototype】
Boost jp9 program_options
Template Meta Programming入門から応用まで
Emcpp item31
Ad

Similar to Ocaml lecture slides 01 at axsh (20)

PDF
関数型プログラミング入門 with OCaml
PDF
関数プログラミング入門
PPT
プログラミングの基礎振り返りスライド1
ODP
Vim scriptとJavaとHaskell
PDF
たのしい関数型
PPTX
函数プログラミングの エッセンスと考え方
KEY
Algebraic DP: 動的計画法を書きやすく
KEY
PDF
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
PDF
第2回関数型言語勉強会 大阪
PDF
Rust samurai#01
PDF
Javaプログラミング入門
PDF
[Basic 12] 関数型言語 / 型理論
PPT
言語処理系入門€5
PPTX
関数型言語&形式的手法セミナー(3)
PDF
BOF1-Scala02.pdf
PDF
BOF1-Scala02.pdf
PDF
BOF1-Scala02.pdf
PDF
これからの「言語」の話をしよう ―― 未来を生きるためのツール
KEY
Clojure programming-chapter-2
関数型プログラミング入門 with OCaml
関数プログラミング入門
プログラミングの基礎振り返りスライド1
Vim scriptとJavaとHaskell
たのしい関数型
函数プログラミングの エッセンスと考え方
Algebraic DP: 動的計画法を書きやすく
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
第2回関数型言語勉強会 大阪
Rust samurai#01
Javaプログラミング入門
[Basic 12] 関数型言語 / 型理論
言語処理系入門€5
関数型言語&形式的手法セミナー(3)
BOF1-Scala02.pdf
BOF1-Scala02.pdf
BOF1-Scala02.pdf
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Clojure programming-chapter-2
Ad

More from Tomofumi Hayashi (9)

PPTX
CNIふぉーびぎなーず
PDF
4 rhtn tohayash-multus
PPTX
Opnfv primer how to get into opnfv
PPTX
コンテナのネットワークインターフェース その実装手法とその応用について
PPTX
Opnfv handson apex intro
PPTX
OpenStack Summit Boston DMA Appendix
PPTX
Software forwarding path
PPTX
OPNFV Meetup Tokyo #1 / Projects Summary
PPTX
nftables: the Next Generation Firewall in Linux
CNIふぉーびぎなーず
4 rhtn tohayash-multus
Opnfv primer how to get into opnfv
コンテナのネットワークインターフェース その実装手法とその応用について
Opnfv handson apex intro
OpenStack Summit Boston DMA Appendix
Software forwarding path
OPNFV Meetup Tokyo #1 / Projects Summary
nftables: the Next Generation Firewall in Linux

Ocaml lecture slides 01 at axsh