XocamlbookX #contents 標準ライブラリからの抜粋。これは説明したほうがいいんじゃね?というやつ。 - どのくらい詳しく解説するべきか…。長過ぎてもあれだし。 -- [[しもむら]] &new{2007-02-16 (金) 17:32:59}; - この章全体で30〜40ページくらいになるように考えてもらえればと思います。あと、関数を一つずつ解説しなくても、まとめられる所はまとめて下さっても結構です。例えば、ファイル入出力のopen,read,closeとか。 -- [[ogasawara]] &new{2007-02-18 (日) 04:19:08}; - ちょっと書いてみた。 -- [[やまはた]] &new{2007-02-19 (月) 23:05:21}; - 皆さんありがとうございます。できればどんどんtexソースとして書いていって頂けますか?wiki -- [[ogasawara]] &new{2007-02-20 (火) 18:27:03}; - あれ、標準ライブラリは(TeX原稿の)なんてファイルに書いたらいいのでしょう?今のところはファイルはないですよね? -- [[しもむら]] &new{2007-02-20 (火) 23:22:00}; - あ、6章なんですね。すいません。てっきり巻末の資料として載るのかと思ってました。 -- [[しもむら]] &new{2007-02-21 (水) 11:00:45}; #comment *Pervasives [#q59e1a2a] http://ocaml.jp/archive/ocaml-manual-3.06-ja/libref/Pervasives.html **例外 [#kf60eeec] - raise - failwith - Failture - Not_found **整数演算 [#i4fbe312] - 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. # **浮動小数演算 [#d15ce771] - (**) - sqrt - exp - ceil - floor - int_of_float - infinity - neg_infinity - nan **文字列演算 [#z5e9dac3] - (^) # (^);; - : string -> string -> string = <fun> 文字列を結合し、ひとつの文字列を返します。 # "Objective" ^ "Caml";; - : string = "ObjectiveCaml" もちろん空の文字列でも大丈夫です。 # "" ^ "";; - : string = "" ** 文字演算 [#r58f643d] - int_of_char - char_of_int ** 文字列演算 [#tcc1a4e8] - string_of_{bool,int,float} - {bool,int,float}_of_string ** リスト演算 [#bcb9bc97] - (@) # (@);; - : '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] ** 標準入出力 [#t44c4f9a] - stdin/stderr/stdout - print_string - print_char - print_int - print_float - read_line ** ファイル出力 [#p2b8d812] - open_out - output_string - close_out ** ファイル入力 [#t936411d] - open_in - input_string - close_in * Listモジュール [#j81613de] とりあえずListモジュールは下村が担当します。 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モジュール [#y340cc92] Arrayも、とりあえず下村が担当します。 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モジュール [#y6650be9] 下村が書きましたが、いまいちな感じなので誰か書き足したり修正したりしてください。 http://ocaml.jp/archive/ocaml-manual-3.06-ja/libref/Printf.html - printf - sprintf * Hasttblモジュール [#n5f238e7] http://ocaml.jp/archive/ocaml-manual-3.06-ja/libref/Hashtbl.html - create - clear - add - find - fold *Stream モジュール[#e563f928] http://ocaml.jp/archive/ocaml-manual-3.06-ja/libref/Stream.html [[streamの拡張構文:http://www.math.nagoya-u.ac.jp/~garrigue/papers/jssst-ocaml.html]] - of_list - of_string - of_channel - iter