タグ

OCamlに関するhitsujibaneのブックマーク (14)

  • OCaml 基礎最速マスター — Scratch Leaf — MAYAH.JP

    OCaml は Haskell とは違って純粋でない関数型言語です。ML (Meta Language) という言語ファミリーの方言の一つで、フランスの INRIA という研究所で開発されています。速度を稼ぐために命令型のように書こうと思えば書けるし、遅延評価もデフォルトではしません。その分、practical なアプリケーションが書きやすくなっています。 他の言語をある程度知っている人はこれを読めば OCaml のとりあえずの基礎をマスターして OCaml を書くことができるようになります。多分。関数型言語の知識は仮定していません。C/C++ ぐらいの知識があれば読めると思います。元の Perl 基礎文法最速マスターではリファレンスぽい作りですが、チュートリアルぽくなってしまいました。 なお、読んでいると分かりますが、色々とめんどくさいことが多いように感じます。しかし、これをちゃんと書く

  • 使うと「通常の3倍」の速度で OCaml のソースコードを理解できる OCamlSpotter - camlspotter’s blog

    (その変態的シンタックスに慣れれば) 結構早くプログラムが理解できるとうわさの OCaml ですが、他人の書いた OCaml ライブラリを読んだり、自分が書いた物でも、コード規模が大きくなってきたりすると、 どこかにあるハズの定義が見つからねぇ ってことが多くなってきます。例えば、 open M open N ... 何百行もある ... let compute () = ... X.f ... っていうソースがあったとして、 X.f の定義を探したいとき、どうしますか?普通は、こんな感じでやります: x.ml というファイルがあれば、多分その中に f というのがあるはず => x.ml なんて無い じゃあ、「何百行もある」の中にモジュール X が定義されてるかもしれないから、エディタでサーチする => 無い あれー?じゃあ、どっか別のディレクトリの中に x.ml があるのか? find

    使うと「通常の3倍」の速度で OCaml のソースコードを理解できる OCamlSpotter - camlspotter’s blog
  • 初心者が書いた OCaml 入門

    This domain may be for sale!

  • OCaml 標準ライブラリ探訪 #3.0: Printf: 便利だけどいろいろ謎のある奴 - camlspotter’s blog

    関連リンク: OCaml 標準ライブラリ探訪 第0回 その他の回は第0回のトラックバックよりご覧ください。 printf って OCaml でも便利ですよね。C から連綿と続いている半ば常識の % インターフェースに加え、ちょっと不思議な型推論のおかげで型安全性も保証されてます。printf 使ってて型エラーが見つかるたびに、あー C だったら seg fault してたかもしれんな、、、良かった良かった、と思います。今日はそんな printf 系の関数を提供する Printf モジュールのお話。 OCaml では printf系の関数は、何か知らんけど書いたら動く、だから深く詮索するな、という不思議(適当) API として提供されています。私はこの清濁併せ呑む OCaml の姿勢が好きなんですが、、、まあ人それぞれですな。 お品書き Printf の特殊な型付けについて / format

    OCaml 標準ライブラリ探訪 #3.0: Printf: 便利だけどいろいろ謎のある奴 - camlspotter’s blog
  • OCaml 標準ライブラリ探訪 #2 List に関するおわびとおことわり - camlspotter’s blog

    関連リンク: OCaml 標準ライブラリ探訪 第0回 その他の回は第0回のトラックバックよりご覧ください。 「さようなら」周り等で、ご批判を頂きました。ありがとうございます。元来の毒舌な者ですから、ご勘弁ください。教科書や論文を書いてるわけでも無し、このブログはお酒飲んで常に勢いで書いておりますから、深く推敲いたしません。こんなの出版しても売れないでしょ? 関数型言語では (ここで関数型言語と限定する必要は無いのかもしれませんが、他の言語のことは良く判りませんので語るべきでは無いでしょう)、 再帰ははっきり言って難しい概念で、これは逃げずに強調すべき点だと考えます。こんな感じに言い換えてみると私の強調度がわかるのでは無いでしょうか: Cでポインタ理解したくない?お互い不幸になるだけですから、ポインタの無い言語を使ってください。ごきげんよう。 私は自称「関数型言語できます」という方にはこの十

    OCaml 標準ライブラリ探訪 #2 List に関するおわびとおことわり - camlspotter’s blog
  • OCaml 標準ライブラリ探訪 #2 List : スタックと計算量に注意 - camlspotter’s blog

    関連リンク: OCaml 標準ライブラリ探訪 第0回 その他の回は第0回のトラックバックよりご覧ください。 やあこんにちは。ちょっとショッキングなことがあってブルーな筆者です。他にも 3kg は一瞬で減量できたんですがね、そこから先がなんともです。まーみなさんには関係有りませんね。 標準ライブラリ探訪第二回は List です。このモジュールは関数型言語で最も基的な再帰データ型である list 型のデータを扱う関数群からなっています。 OCaml では list は predefined な型で、その定義は標準ライブラリにはなく、コンパイラにとって既知になっています。(詳しい内部定義は ${srcdir}/typing/predef.ml にあります。) が、あえて、list 型の定義を書いてみると、次の様な variant型として書く事が出来ます: type 'a list = | []

    OCaml 標準ライブラリ探訪 #2 List : スタックと計算量に注意 - camlspotter’s blog
  • OCaml 標準ライブラリ探訪 #1.2 Pervasives 補遺 - camlspotter’s blog

    関連リンク: OCaml 標準ライブラリ探訪 #0 その他は上の記事のトラックバックから。 他の方同士の会話からでも勝手に抜き取ります。すいません。 [...] failwithf "hoge: %s" "hii" ();;でも普通に動きます。でもなんで()付きで [...] chunjpさん これは、ご紹介した failwithf の実装 val failwithf : ('a, unit, string, unit -> 'b) format4 -> 'a let failwithf fmt = Printf.kprintf (fun s () -> failwith s) fmt の実装で、例えば、 failwithf "something has failed: %s" reason ();; の様に、なぜ、わざわざ最後に () が必要なのか?ということですね。 val failw

    OCaml 標準ライブラリ探訪 #1.2 Pervasives 補遺 - camlspotter’s blog
  • OCaml 標準ライブラリ探訪 #1.1 Pervasives 補遺 - camlspotter’s blog

    関連リンク: OCaml 標準ライブラリ探訪 #0 OCaml 標準ライブラリ探訪 #1: Pervasives 御好評のようでいくつか twitter でつぶやきを頂いております。私がフォローもしくはキーワード OCaml で監視して見つけたモノのみしか追えませんが、、、まあつぶやいた皆様にとっては自明な事かもしれませんが、tutorial として価値がありそうなので。 そうえいば、 Pervasives と既定義の違いはなんなんだろう。全部 Pervasives でいいような。 ytominoさん predefined.ml で既定義になっているデータ型、コンストラクタ、例外はコンパイラ内部で型推論時や最適化時に使用されています。例えば、array.(x) (array の要素アクセス) という式では x の型は int でなければいけませんが、この型推論を行うには int 型の存在を

    OCaml 標準ライブラリ探訪 #1.1 Pervasives 補遺 - camlspotter’s blog
  • OCaml 標準ライブラリ探訪 #1: Pervasives: 最も使われてるのに最も名前が知られていない奴 - camlspotter’s blog

    関連リンク: OCaml 標準ライブラリ探訪 #0 標準ライブラリ探訪第一回は Pervasives です。 OCaml ソースファイルを持っている場合には ${srcdir}/stdlib/pervasives{.ml,.mli}、ライブラリディレクトリを見ている場合には ${libdir}/pervasives{.ml,.mli} *1 を見てください。 ところで、Pervasives って単語、知ってましたか?私はいまだに OCaml 以外でこの単語を見たことがありません。"pervert" じゃないですよ、"pervasives" です: Pervasives : [adj] 行き渡る、普及する、広がる傾向にある、(全面的に)広がる、拡散的な、広範囲な、まん延する 英辞郎 なんだかよくわかりませんね。でも、 Pervasives モジュールは OCaml で最もよく使われるモジュー

    OCaml 標準ライブラリ探訪 #1: Pervasives: 最も使われてるのに最も名前が知られていない奴 - camlspotter’s blog
  • OCaml 標準ライブラリ探訪 #0 - camlspotter’s blog

    OCaml 標準ライブラリへようこそ OCaml 標準ライブラリは、機能が足りない、なんで dev team はライブラリを放っているんだ、とかコケにされた上に、もう我慢できないから自分で次世代標準ライブラリを作っちゃうよ、といった運動も起こっている(extlib / batteries included / Jane Street's core)といったちょっと悲しい問題があるのですが、実の所、OCaml プログラミングで一番お世話になるのがこの標準ライブラリなのです。一応、最低限の機能は提供されていますし、コメントもかなり充実しています。OCaml のバイナリパッケージをインストールするだけでソースも見ることが出来ますし(ただしパッケージがずるをして標準ライブラリソースを飛ばしていなければですが)、コード量も多すぎず、少なすぎず、 OCaml 入門の際の副教材、コード例としても最適。標

    OCaml 標準ライブラリ探訪 #0 - camlspotter’s blog
  • recursive module で polymorphic recursion を書く - camlspotter’s blog

    OCaml 3.12.0 より明示的に型を書くことで polymorphic recursion (多相再帰) が簡単に書けるようになりました: let rec len : 'a. 'a sep -> int = function | Nil -> 0 | Cons (_, sep) -> 1 + 2 * len sep let rec ... in ... で定義される値は、in の後では polymorphic でも、定義の中では monomorphic。異なる複数の型で使うことは出来ません。でも、ほとんど普通は違った型で使ったりしないので、不便ありません。でもタマ〜に、定義中でも polymorphic だったら嬉しいな、ということがあります。例えば、Chris Okasaki の Purely Functional Data Structures 作者: Okasaki出版社/メ

    recursive module で polymorphic recursion を書く - camlspotter’s blog
  • 速攻MinCamlコンパイラ概説

    hitsujibane
    hitsujibane 2009/04/04
    OCamlでの小さなコンパイラのコードを、作者が解説
  • christiankissig.de

    hitsujibane
    hitsujibane 2009/03/22
    OCamlで問題を99問解く
  • A Cross-language Comparison of Monads in Haskell, O’Caml, and Qi

    Benjamin's Adventures in Programming Language Theory Wonderland A few days ago, there was an interesting post by Rafael Gustavo da Cunha Pereira Pinto, dated “Mon, 5 Jan 2009 09:08:37 -0200,” on the Haskell-beginners mailing list on the Haskell programming language, referencing a monad tutorial for the O’Caml programming language that provided an alternative perspective in helping to illustrate mo

    A Cross-language Comparison of Monads in Haskell, O’Caml, and Qi
    hitsujibane
    hitsujibane 2009/01/17
    Haskell、OCaml、Qiでのモナドについての比較
  • 1