2006-09-01から1ヶ月間の記事一覧
田舎者で友達がいない子 (ex. 俺) は、技術用語の読み方がわからないため、人前で話したりするとさあ大変。宇宙人を見るような目で「そんな読み方する人、始めて見たよ」とか言われてしまいます。というわけでアンケートを作ってみました。http://shinh.skr.…
Firefox を便利にーっていうのは色々考えたものの、どうもなんか Firefox は手に馴染みきらないということで、結局 w3m を使ってるわけですが、 w3m の不満点が見えてきたのは良いことだったと思いました(現代の若者はなんでも正当化)。で、欲しいのは Greas…
HTMLタグ練習帳 と TCC は素晴らしい を見ていて、ああ TCC は素晴らしいですよねぇ、とちょっとしたものを作ってみました。http://shinh.org/webtcc/webtcc.htmltextarea に書いたものが AJAX とかそんな感じでガンガンコンパイルされていくものです。少し…
なんとなく MinCaml を x86 に移植とかしてました。が、いつものごとく飽きてきたので中断。気が向いたら再開するかもですが、とりあえず BSD ライセンスぽいので上げときます。http://shinh.skr.jp/tmp/min-caml_x86.tgzやったこと的にはなんかある程度 x86…
前回、 bf => asm なコンパイラを sed で書いたのですが、「bf のコンパイラとは bf の逆アセンブラのこと」であるという主張を読んで、ああ全くその通りだなぁうまいこと言うなぁと思うと同時に、じゃあ実行できるバイナリ吐けば単なる逆アセ扱いされないよ…
もんだいです。以下の挙動をするプログラムを考えてください。 i@un ~> ./a.out > l hello i@un ~> ./a.out 2> l helloこたえ。 i@un ~> cat putstdin.c main(){ write(0,"hello\n",6); } i@un ~> ./a.out 0> l i@un ~> cat l helloいやあ最近 write の引数…
http://haskell.g.hatena.ne.jp/mr_konn/20060919/1158656918Haskell 製の FORTH に非常に大人気ない対抗をしてみました。 @v={ '+'=>proc{@s<<@s.pop+@s.pop}, '-'=>proc{@s<<-@s.pop+@s.pop}, '*'=>proc{@s<<@s.pop*@s.pop}, '/'=>proc{d=@s.pop;@s<<@s.po…
毎日違う言語な気がしますがそんなことないですよ。さっき Io コンパイルしました。
http://icfpcontest.org/scoreboard.shtmlk.inabaさんおめでとうございます!!で、感想ですが。ていうか k.inaba さんとこ 2 点差ですかー。危いですなー。私は30位でした。正直1000点の問題は解けただろうという感があるだけに残念ではあるんですが、冷静…
sed って足し算くらいできるんじゃないかと思ったので作ってみました。http://shinh.skr.jp/koneta/add.sed i@um ~> echo 1 1 | ./add.sed 2 i@um ~> echo 999 999 | ./add.sed 1998 i@um ~> echo 12345 54321 | ./add.sed 66666ICFPC のクソ(誉)言語どもに…
http://d.hatena.ne.jp/mmatsuoka/20060712#1152632406とかを見て、 x86 アセンブラを出すコンパイラを sed で書いてみました。http://shinh.skr.jp/koneta/bf.sed実行例は、 i@um ~> ./bf.sed hello.bf | gcc -x assembler - i@um ~> ./a.out Hello World! …
実行する時とかに -dinstr オプションをつけるとバイトコードが出るそうです。 let _ = print_int 12345; ()みたいなコードは、 i@u ~/test/ocaml> gcaml -dinstr pr_test.ml const 12345 push getglobal Pervasives! getfield 30 apply 1 const 0a return 1…
なんかやはり enum は print できないとダメですよね!ということで MetaOCaml は中一までだったかもと思ったとか。http://d.hatena.ne.jp/sumii/20060918/1158537612#c1158545128 type a = A type b = B of int let _ = Gprint.eprint "aaaa"; Gprint.eprin…
OCaml は小学生までかなぁと思ったので立派な中二になるべく。とりあえず unless でも書いてみる。 let unless cond no = if not cond then no else .< () >. let _ = .! (unless true .<print_string "hello true\n">.); .! (unless false .<print_string "hello false\n">.);読みにくいなぁ。ちょっとした構文拡張に使</print_string></print_string>…
コメントの話が出たので、最後はコメントです。 (* と *) で囲んだものはコメントで、ネスト可能です。複数行もオッケーです。ですがとてもウザい問題がありまして、1行コメントが無いという問題があります。 camlp4 …は私の理解ではこれできんと思いますが…
型推論といえば 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 が出…
union といえば(ていうか union じゃなくて variant 型とか言うらしいですが)、なんか option 型とかいうのが組み込まれてて、なにやらこれが便利で、えーと無効な値を表現できるとかそんな物体で。 let div x y = if y = 0 then None else Some (x / y) let…
なんかやっと 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…
さらりと重要な物体が出てきたんですが、なんもしないプログラムを書くのは hello world より難しいみたいな話があった気がしますが OCaml は () でも書いときゃいいです。これは要するに void というかそんなのみたいです。 unit 型というらしいです。 let …
んで let はなんか二つの用途に使える感じで、変数束縛と関数定義です。引数が無い場合は変数束縛になる。 let tsuhai_name = [| "東"; "南"; "西"; "北"; "白"; "發"; "中" |]とかがそれ。引数は括弧とかつけずにコンマとかも無しで空白でくぎってならべる…
main はなんか _ に代入するような感じでやるんが一般的みたいですねなんか。別に let main = とかでもいいっちゃいいし、これは単なる値の代入してるだけなんですが。どうでもいいけど _ は関数名に使えないみたいなのです。いやどうでもよくなくて、なんか…
配列は [| |] でリストは [ ] です。配列にランダムアクセスする時は .() で文字列は .[] で要するに覚えられないし書きにくいし見た目もイマイチなのでこれは非常にイケてないのですが、型推論のためなのでしゃーないというか。もっと致命的にうざいのはか…
なんか enum みたいなヤツは、 match っていうスーパー switch 文みたいなヤツで使うと、全部のケースがチェックされてるかどうかコンパイラがチェックしてくれてこれが便利なのですが、弱点があって int 値として使えないというか連番機能として使えないと…
ゲーム脳と OO 脳は不治の病なのでとりあえず OO は使わん方向で考えることになっています。型は全部 type 予約語でやるんだけど、やり方によって役割変わりまくりというか。 (* typedef *) type pai = int (* enum *) type tsuhai = E | S | W | N | H | T …
OCaml は半年に一度くらい触ることになってるので、ここは今日から OCaml 学習帳になります。たぶん明日くらいにやめてます。(ちなみにここまで書いたのは一昨日なので既に終わってるような)で、なんとなく麻雀の上がり判定とか書いてました。こんなの。http…