OCaml

http://d.hatena.ne.jp/KeisukeNakano/20070314/1173846972 なるほど、参考になります。でも 2 番目の apply_3 で f を呼ぶときにはオプショナル引数を省略しているから,apply_3 f は int 型. apply_3 で f を呼んでも部分適用かもしれないので,apply_3 f…

オプション引数

$ocaml Objective Caml version 3.09.3 # let f x y = failwith (x^y);; val f : string -> string -> 'a = # (fun g -> g "foo" "bar") f;; Exception: Failure "foobar". OK。 # let f ?(a=0) x y = x ^ y;; val f : ?a:int -> string -> string -> string…

るびま 18 号

Rubyist のための他言語探訪 【第 11 回】 C++ 静的型言語は型が適合しなければポリモルフィズムを発揮できませんから、ある機能を呼び出すためにはかならず共通のスーパークラスを持つ必要があります。 ううむ。これはちょっと。

infix to postfix

真面目にパースしたら 336B で絶望したので、あんまり真面目じゃないので参加。それでも 318B とさほど変わらず。もうちょっと縮むような気もするが…。 あと echo の 29B は謎すぎです。

m.ukai さんの技は気付きませんでした。例外で再帰を抜けるのは考えていたんですが…。 これを使ったら Hamming Numbers が 120B になりました。いやーゴルフは深い。

!

ksk さんが even lines の記録を縮めてるのを見て、えー!と思ったが、昨日書いたように演算子を使えばいいんですね。定義できるのは二項演算子だけだと思っていたので盲点でした。 というわけでネタバレ。 let rec(!)r=r();print_endline(r());!r;;!read_lin…

Tips

2 引数の関数を定義するとき普通は let f x y=... とするが let(%)x y=... と記号を使って二項演算子にすると、適用時にスペースや括弧が要らなくなって嬉しいことがある。

文字列中のバックスラッシュ

OCaml では print_endline "\(^_^)/" を実行すると「illegal backslash escape in string」という警告が出るがエラーにはならず、「\(^_^)/」と表示される。 一方 Ruby の puts "\(^_^)/" は警告は出ずに「(^_^)/」と表示される。しかし、 puts '\(^_^)/' は…

Card Sharp

Card Sharp で一位ゲット(237B)。それにしてもひどいコードだ。

あなごるに挑戦

なんか流行ってるみたいなのでやってみた。even lines はこれが限界っぽいなあ。他のも見てみたけど追い付ける気がしない…。

puts

OCaml で Ruby の puts もどき。可変個の引数を取る。 $ ocaml -rectypes Objective Caml version 3.09.3 # let rec puts s = print_endline s; puts;; val puts : string -> 'a as 'a = <fun> # puts "foo" "bar";; foo bar - : string -> 'a as 'a = <fun> # puts "o</fun></fun>…

ledit

OCamlの対話環境でヒストリー機能とか色々使いたくなったのでleditを入れる。 ledit-1.11.tar.gz を落としてmake…すればいいはずなのだが、 $ make camlp4r pa_extend.cmo q_MLast.cmo pa_local.ml -o pa_local.ppo File "pa_local.ml", line 34, characters…

Obj

Objヤバイ # type foo = { count : int };; type foo = { count : int; } # let x = { count = 4 };; val x : foo = {count = 4} # Obj.set_field (Obj.repr x) 0 (Obj.repr 8);; - : unit = () # x;; - : foo = {count = 8}うぎゃ。Obj.set_field (Obj.repr…

ocamlyaccってocamllexと一緒に使わなきゃいけないんだろうか。lexerは手で書きたいとか思ったりしたらどうするんだろう。うーむ。