タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

ocamlに関するmarblejenkaのブックマーク (10)

  • Effective ML 9ヶ条 - camlspotter’s blog

    私の前のボスのハーバードでの講演のビデオが公開されました: http://ocaml.janestcapital.com/?q=node/82 彼は早口ですが、まあ頑張って聞いてください。普通に判れば、アメリカで普通に仕事できます。判らなくても仕事できますから安心してください。 正直、この Effective ML 9ヶ条と Jane Street Core のソースコードを見れば、 Jane Street での関数型プログラミングの秘訣は大体抑えられると言ってよいでしょう。学問的には新しいことは何もありませんが、徒党を組んで関数型言語によるプロジェクトを行うには重要な物ばかりです。 この、Effective ML 9ヶ条をまとめておきました。これを見ながら視聴すると良いかもしれないです。オリジナルは 00:47:13 で見れますね。 コードライタよりもリーダの意見を尊重せよ。大体において

    Effective ML 9ヶ条 - camlspotter’s blog
  • OCamlでlet recを使わずにfact関数を定義する - にわとり小屋でのプログラミング

    今日はProofCafeでCPDTの三章を読み進めたが、そこでCoqではInductive型のコンストラクタの引数が関数のとき、その関数の左側に自分自身が現れてはいけないということを学んだ。もしそれを可能にしてしまうと無限ループが定義でき、公理系が矛盾してしまうからだ。次のシンプルな例を見てみよう。 Inductive t (A: Set) : Set := | T : (t A -> A) -> t A. 一見なんの問題も無さそうな この型定義は失敗し、次のようなコンパイルエラーが出力される。 Error: Non strictly positive occurrence of "t" in "(t A -> A) -> t A".もしこの型が定義できたとすると次のような関数が定義できてしまう。 Definition ワォ (T f) := f (T f). ここで (ワォ (T ワォ)

    OCamlでlet recを使わずにfact関数を定義する - にわとり小屋でのプログラミング
  • 高階関数パズルの解説 - camlspotter’s blog

    前回の日記でこのような問題を出しました: 問題 次の twice 関数は、第一引数である関数 f を第二引数 x に二回適用する高階関数です。 let twice f x = f (f x) この時、次の各式の結果は以下のようになります: 式 ==> 結果 twice ((+) 1) 0 ==> 2 twice twice ((+) 1) 0 ==> 4 twice twice twice ((+) 1) 0 ==> 16 では、 twice twice twice twice ((+) 1) 0 の返す値は何ですか?まず、実際にプログラムを走らせずに、考えてみてください。 これは Python Hack-a-thon #4 で OCaml の紹介をしているときに高階関数の話をしている時に、ちょっと出してみた物です。解答も何も言わずに、暇だったらやってみてね、って感じで紹介しただけでしたの

    高階関数パズルの解説 - camlspotter’s blog
  • 高階関数クイズ - camlspotter’s blog

    ちょっとした高階関数を使ったパズルです。前の会社の面接で使おうかなあと思っていたのですが、使う機会もなくなったので。全く別の機会に、高階関数を教えるための例を書いていて、遊んでいたら面白いものを見つけたので覚えていたのです。 # let twice f x = f (f x) これは f という関数と値 x をもらって、f を二回 x に適用する関数です。 次の add1 は引数 x を受け取って、1足して返す関数です。これを twice に使うと、こうなります。 # let add1 x = x + 1 # add1 0 1 # twice add1 0 2 関数型言語に慣れている方なら、twice ((+) 1) 0 でも同じですね。(OCaml を使っていますが、慣れていない方の為に、出力を一部省略しています。# はプロンプトです。コメントじゃありません。あと、入力の後には ;; を

    高階関数クイズ - camlspotter’s blog
  • Users Meeting - OCaml.jp

    縺薙�ョ繝壹�シ繧ク縺ッ譛�蠕後↓譖エ譁ー縺輔l縺ヲ縺九i1蟷エ莉・荳顔オ碁℃縺励※縺�縺セ縺吶�よュ蝣ア縺悟商縺�蜿ッ閭ス諤ァ縺後≠繧翫∪縺吶�ョ縺ァ縲√#豕ィ諢上¥縺縺輔>縲� OCaml Meeting 2009 in Tokyo (蟷ウ謌仙サソ荳�蟷エ譚ア驛ス螟ァ鬧ア鬧昜シ�) 縺薙�ョ繧、繝吶Φ繝医�ッ逶帶ウ√�ョ縺�縺。縺ォ邨ゆコ�閾エ縺励∪縺励◆縲ゅ#蜿ょ刈鬆ゅ>縺溽嚀讒倥�√≠繧翫′縺ィ縺�縺斐*縺�縺セ縺励◆縲� 逋コ陦ィ雉�譁吶d蜍慕判縺檎スョ縺�縺ヲ縺ゅj縺セ縺吶�ョ縺ァ縲√#蜿ら�ァ縺上□縺輔>縲� 髢「謨ー蝙玖ィ�隱� OCaml縲�1994蟷エ縺ォ螟ァ蜈�縺ィ縺ェ繧� CAML 縺悟ョ溯」�縺輔l縺ヲ莉・譚・縲�髟キ繧峨¥遐皮ゥカ閠�逕ィ縺ョ縲後♀繧ゅ■繧�縲阪↓逡吶∪縺」縺ヲ縺�縺� OCaml 縺ァ縺吶′縲√◎縺ョ繝励Ο繧ー繝ゥ繝縺ョ螳牙�ィ諤ァ繧剃ソ晁

  • OCamlerのためのCoq便利モジュールを公開してみた - にわとり小屋でのプログラミング

    このBaseモジュールをインストールすれば、写真の用なコードを書くことが出来る。 ダウンロード: http://sourceforge.jp/projects/coqbase/ 具体的には以下のことを定義した。 標準出力へ出力するprint, println関数 命令をつなげるセミコロン演算子 依存型を使った型安全なprintf関数 natからOCamlのint、stringからOCamlのstringへの相互変換関数 Coqでのbool、sumbool、list、option型をそのままOCamlの型として使うための連携

    OCamlerのためのCoq便利モジュールを公開してみた - にわとり小屋でのプログラミング
  • delimited continuation - ocaml-nagoya

    限定継続とは? † 継続は「その後の計算」を表現したものです。対して、限定継続は「特定の範囲のその後の計算」を表現したものです。つまり、継続がグローバルな「その後」とイメージするならば、ローカルな継続が限定継続という感じです。 限定継続を扱う演算子には主にshift/resetのペアとprompt/controlのペアがあります。それぞれ静的な演算子、動的な動的な演算子と呼ばれます。(その理由はschmeとかのdynamic bindingとかと関係あるらしいけど、よくわかりません)

  • 数理科学的バグ撲滅方法論のすすめ---目次 | 日経 xTECH(クロステック)

    筆者 住井 英二郎 「プログラミング言語理論」という研究分野がある。この分野の研究者たちは,「ML」「Haskell」「Scheme」あるいは「λ計算」「π計算」(円周率計算のことではない)など,多くのプログラマにとっては聞いたこともない言語やモデルについて,日夜研究している。ただ,そのような言語は「難しい」「役に立たない」などと思われがちだ。 この連載では,こうしたプログラミング言語やソフトウエア科学の様々な研究を,できるだけ普通のプログラマやエンジニアにもわかりやすく(どちらかといえば理論よりも実用に重点をおいて)紹介していく。 更新は毎月第2水曜日(1月のみ第3水曜日)

    数理科学的バグ撲滅方法論のすすめ---目次 | 日経 xTECH(クロステック)
  • MLFi ‐ 金融商品を書くための関数型言語

    前に調べて気になっていた言語についてメモしておきます。 その言語はMLFi(Modeling Language for Finance)。デリバティブなど複雑な金融商品を記述するためのプログラミング言語です。開発元のLexiFi社のページによると,Camlを拡張した関数型言語だそうです。 LexiFi: Structured Product Pricing and Processing 日語の解説は以下の文書が分かりやすいです。 関数型言語による金融アプリケーション(PDFファイル) この文書によるとMLFiは金融商品を簡潔に書くために作られたものらしいです。デリバティブのような複雑な金融商品は仕様書(目論見書?)も煩雑になりがちだけど,関数型言語を使えば幾つかの部品の組み合わせで表現できますよー,ということをMLFiの開発者たちは考えて実践したそうです。 実際,15個のコンビネータを定

  • OCaml.jp

    このページは最後に更新されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。 OCaml(オキャムル/オーキャムル)は、INRIA(フランス国立情報学自動制御研究所)で開発されている関数型言語の一種で、最新の言語理論の成果が取り入れられたプログラミング言語です。 型安全な静的型システムを基盤に、バグの少ない高信頼なプログラムが開発できます。 オブジェクト、型推論、代数的データ型、モジュールシステム、多相バリアント、第一級モジュール、GADTといった様々な機能を利用して、より簡潔で整理されたコードが記述できます。 x86, x86-64, ARM, PowerPCなど多数のアーキテクチャのネイティブコードを出力できるコンパイラを持っています。Android や iOS 向けのクロスコンパイルも可能です(Linux 上でのクロスコンパイルは opam-cross-a

  • 1