#ocamlbook#

標準ライブラリからの抜粋。これは説明したほうがいいんじゃね?というやつ。

  • どのくらい詳しく解説するべきか…。長過ぎてもあれだし。 -- しもむら? 2007-02-16 (金) 17:32:59
  • この章全体で30〜40ページくらいになるように考えてもらえればと思います。あと、関数を一つずつ解説しなくても、まとめられる所はまとめて下さっても結構です。例えば、ファイル入出力のopen,read,closeとか。 -- ogasawara? 2007-02-18 (日) 04:19:08
  • ちょっと書いてみた。 -- やまはた? 2007-02-19 (月) 23:05:21
  • 皆さんありがとうございます。できればどんどんtexソースとして書いていって頂けますか?wiki -- ogasawara? 2007-02-20 (火) 18:27:03
  • あれ、標準ライブラリは(TeX原稿の)なんてファイルに書いたらいいのでしょう?今のところはファイルはないですよね? -- しもむら? 2007-02-20 (火) 23:22:00

Pervasives †

http://ocaml.jp/archive/ocaml-manual-3.06-ja/libref/Pervasives.html

例外 †

  • raise
  • failwith
  • Failture
  • Not_found

整数演算 †

  • abs
# abs;;
- : int -> int = <fun>
#

引数の絶対値を返します。

# abs (-1);;
- : int = 1
#
# abs 1;;
- : int = 1
#
  • mod
# (mod);;
- : int -> int -> int = <fun>
#

余りを返します。

# (mod) 3 2;;
- : int = 1
#
# 3 mod 2;;
- : int = 1
#

2つ目の引数が0の場合には、例外を発生させます。

# 3 mod 0;;
Exception: Division_by_zero.
#

浮動小数演算 &dagger;

  • (**)
  • sqrt
  • exp
  • ceil
  • floor
  • int_of_float
  • infinity
  • neg_infinity
  • nan

文字列演算 &dagger;

  • (^)
# (^);;
- : string -> string -> string = <fun>

文字列を結合し、ひとつの文字列を返します。

# "Objective" ^ "Caml";;
- : string = "ObjectiveCaml"

もちろん空の文字列でも大丈夫です。

# "" ^ "";;
- : string = ""

文字演算 &dagger;

  • int_of_char
  • char_of_int

文字列演算 &dagger;

  • string_of_{bool,int,float}
  • {bool,int,float}_of_string

リスト演算 &dagger;

  • (@)
# (@);;
- : 'a list -> 'a list -> 'a list = <fun>

与えられた2つのリストを連結し、連結されたリストを返します。

# [1;2;3] @ [4;5;6];;
- : int list = [1; 2; 3; 4; 5; 6]

この関数はListモジュールのappendという関数と同様の関数なのですが、@のみ中置演算子として利用できます。

いちおう・・・

# List.append;;
- : 'a list -> 'a list -> 'a list = <fun>
# List.append [1;2;3] [4;5;6];;
- : int list = [1; 2; 3; 4; 5; 6]

標準入出力 &dagger;

  • stdin/stderr/stdout
  • print_string
  • print_char
  • print_int
  • print_float
  • read_line

ファイル出力 &dagger;

  • open_out
  • output_string
  • close_out

ファイル入力 &dagger;

  • open_in
  • input_string
  • close_in

Listモジュール &dagger;

http://ocaml.jp/archive/ocaml-manual-3.06-ja/libref/List.html

  • length

リストの長さを返します。

# List.length [1;2;3];;
- : int = 3
# 
  • hdとtl

hdは、リストの先頭要素を返します。

# List.hd [1;2;3];;
- : int = 1
# 

空リストに適用した場合には、例外を発生させます。

# List.hd [];;
Exception: Failure "hd".
# 

tlはhdの反対で、リストの先頭要素を除いた残りを返します。

# List.tl [1;2;3];;
- : int list = [2; 3]
# 

こちらも、空リストに適用すると例外を発生させます。

# List.tl [];;
Exception: Failure "tl".
# 
  • rev

与えられたリストの要素の順番を反転したものを返します。

# List.rev [1;2;3];;
- : int list = [3; 2; 1]
# 
  • concat

与えられた"リストのリスト"を結合し、1つのリストにします。

# List.concat [[1;2];[3;4];[5;6]];;
- : int list = [1; 2; 3; 4; 5; 6]
# 
  • map

引数に関数とリストを取って、リストの各要素に関数を適用してその結果のリストを返す関数です。次の場合、第一引数のChar.uppercaseという関数を第二引数のリストの各要素に適用することになります。

# List.map Char.uppercase ['a';'b';'c'];;
- : char list = ['A'; 'B'; 'C']
# 

Charモジュールのuppercaseは、小文字を大文字に変える関数です。mapとは写像のことで、この場合は、小文字の集合を大文字の集合に写像していることになりますね。

  • fold_left

fold_leftは、畳み込み関数というものです。この関数は、畳み込みに使われる関数fと初期値とリストを取って、現在値とリストの要素を順にfを使って畳み込んでいきます。例えば、リストの要素の和を計算する関数sumは、次のように定義できます。

# let sum numbers = List.fold_left (+) 0 numbers;;
val sum : int list -> int = <fun>
# sum [1;2;3;4;5];;
- : int = 15
# 

これは、次のように展開して考えるとわかりやすいかもしれません。

sum [1;2;3;4;5] = (((((0+1)+2)+3)+4)+5)
  • mem
  • find
  • filter
  • sort

Arrayモジュール &dagger;

http://ocaml.jp/archive/ocaml-manual-3.06-ja/libref/Array.html

  • length
  • make
  • init
  • sub
  • to_list
  • of_list
  • map
  • mapi
  • fold_left
  • sort

Printfモジュール &dagger;

http://ocaml.jp/archive/ocaml-manual-3.06-ja/libref/Printf.html

  • printf
  • sprintf

Hasttblモジュール &dagger;

http://ocaml.jp/archive/ocaml-manual-3.06-ja/libref/Hashtbl.html

  • create
  • clear
  • add
  • find
  • fold

Stream モジュール &dagger;

http://ocaml.jp/archive/ocaml-manual-3.06-ja/libref/Stream.html

streamの拡張構文

  • of_list
  • of_string
  • of_channel
  • iter
トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS