2006-09-17から1日間の記事一覧

コメント

コメントの話が出たので、最後はコメントです。 (* と *) で囲んだものはコメントで、ネスト可能です。複数行もオッケーです。ですがとてもウザい問題がありまして、1行コメントが無いという問題があります。 camlp4 …は私の理解ではこれできんと思いますが…

Emacs

型推論といえば emacs の caml-mode は型を表示する機能とかあるらしいですよ奥さん。これは別な偉い人 (woさん) に教えてもらいました。 ocamlc -dtypes hoge.ml とかすると hoge.annot っていうファイルが出力されるのですが、そのファイルがあると、 caml…

型推論

そういや型はあるけど書かなくていいです。なんかわけのわからんエラーが出たら書くといい気がします。 let rec print_decrement (x : int) : unit =とか書くと型を明示的に書けます。そういえば型推論ある言語ってリファクタリングしやすくないですか。関数…

末尾再帰

なんか関数の最後で再帰呼び出しすると勝手にループになるらしいですよ。まぁ適当にデクリメントしながら画面に表示する関数を書く。 let rec print_decrement x = if x = 0 then () else ( print_int x; print_decrement (x-1); ) let _ = print_decrement …

リスト

パターンマッチとリストは重要なのだった。 C++ の for_each みたいなのを書くとして、 let rec for_each l f = match l with | [] -> () | h :: t -> f h; for_each t f let _ = for_each ["hoge"; "hage"; "hige"] print_endlineなんかこんなん。パターン…

飽きてきた

飽きてきたし record とかどうでもいいです。あれは struct 。たぶん。あとリストとかあった気がするけど別にいいやみたいな。大人気言語の Haskell にもあるしね。 [] とか :: とかが重要ですとか。ていうか今気付いたけど一個上のサンプルに始めて if が出…

option 型

union といえば(ていうか union じゃなくて variant 型とか言うらしいですが)、なんか option 型とかいうのが組み込まれてて、なにやらこれが便利で、えーと無効な値を表現できるとかそんな物体で。 let div x y = if y = 0 then None else Some (x / y) let…

union

なんかやっと union の話なのか。なんか enum の方と似たような定義するわりには割と別の物体というか。要は C でよくやる struct VALUE { int type; union { int i; float f; char* s; } val; }みたいなのを両方一気に定義できちゃう、みたいなそんなノリ。…

手続き脳

; で区切ると普通に次の行に行きます。なんというか副作用アリアリなのでとても嬉しいです。あとなんか ref ってついた変数つくと代入ができる変数になるので、変数に代入しないと生きていけない人も生きていけます。 let _ = let x = ref 0 in print_int !x…

unit

さらりと重要な物体が出てきたんですが、なんもしないプログラムを書くのは hello world より難しいみたいな話があった気がしますが OCaml は () でも書いときゃいいです。これは要するに void というかそんなのみたいです。 unit 型というらしいです。 let …

let 系

んで let はなんか二つの用途に使える感じで、変数束縛と関数定義です。引数が無い場合は変数束縛になる。 let tsuhai_name = [| "東"; "南"; "西"; "北"; "白"; "發"; "中" |]とかがそれ。引数は括弧とかつけずにコンマとかも無しで空白でくぎってならべる…

_

main はなんか _ に代入するような感じでやるんが一般的みたいですねなんか。別に let main = とかでもいいっちゃいいし、これは単なる値の代入してるだけなんですが。どうでもいいけど _ は関数名に使えないみたいなのです。いやどうでもよくなくて、なんか…

配列とめんどいオペレータ

配列は [| |] でリストは [ ] です。配列にランダムアクセスする時は .() で文字列は .[] で要するに覚えられないし書きにくいし見た目もイマイチなのでこれは非常にイケてないのですが、型推論のためなのでしゃーないというか。もっと致命的にうざいのはか…

enum

なんか enum みたいなヤツは、 match っていうスーパー switch 文みたいなヤツで使うと、全部のケースがチェックされてるかどうかコンパイラがチェックしてくれてこれが便利なのですが、弱点があって int 値として使えないというか連番機能として使えないと…

ゲーム脳と OO 脳は不治の病なのでとりあえず OO は使わん方向で考えることになっています。型は全部 type 予約語でやるんだけど、やり方によって役割変わりまくりというか。 (* typedef *) type pai = int (* enum *) type tsuhai = E | S | W | N | H | T …

今日から OCaml 学習帳

OCaml は半年に一度くらい触ることになってるので、ここは今日から OCaml 学習帳になります。たぶん明日くらいにやめてます。(ちなみにここまで書いたのは一昨日なので既に終わってるような)で、なんとなく麻雀の上がり判定とか書いてました。こんなの。http…

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h