2008-03-01から1ヶ月間の記事一覧

ニコスクリプトでオセロ

すっげ!これすっげ!!ニコスクリプトでここまでできるのか!後でソースを読んでみよう。 勝った!! 他の人のコメントが入るとリセットされるらしいので、人がいない時間帯にやるといいみたいです。 あと、コメントするときは一時停止すると時間が進まなく…

ぐいぐい

コンパイルのやり方とか、ファンクターとか、オブジェクトとか、ラベル付き引数とか、オプション引数とか、多相ヴァリアントとかいろいろやったけど、全部すっ飛ばしていきなりGUI。 お金を預けたり引き出したりする簡単なプログラム。 open Tk open Printf …

ニコマス

メルリPの最近の2作にやられた!深夜番組っぽいノリ、好きだよ。 春香コミュの空白の数時間を検証してみたらぐだぐだになった ‐ ニコニコ動画:Q 誕生日も近いのでわた、春香さんの魅力をおさらいする動画 ‐ ニコニコ動画:Q マイリスト 毎度おなじみ流浪のP、…

foldコマンド

let version="0.1" let display_width = ref 80 let filenames = ref [] let spec = [("--width", Arg.Int (fun w -> display_width := w), "Set width of lines"); ("-version", Arg.Unit (fun () -> Printf.printf "fold in OCaml ver: %s\n" version), "D…

不覚にも吹いたwww

高槻やよいがIC定期券のタッチの仕方を教えてくれました ‐ ニコニコ動画:Q くだらねーwww追記。 改良版きてれぅー 【続】高槻やよいがIC定期券のタッチの仕方を教えてくれました ‐ ニコニコ動画:Q

wcコマンド

let version = "0.1" let display_byte_count = ref false let display_line_count = ref false let display_word_count = ref false let filenames = ref [] let spec = [("-c", Arg.Set display_byte_count, "Display the byte counts."); ("-l", Arg.Set …

catコマンド

これもまた簡単に実装できた。 入出力関係は素直に書こうとするとやっぱり手続き型言語みたいになっちゃうのかな。 let version = "0.1" let display_linenum = ref false let filenames = ref [] let spec = [("-n", Arg.Set display_linenum, "Display lin…

円周率を求めてみる(漸化式版)

ちょっと計算したらすごく簡単な式になった。 これを基に再実装。 open Num let pi length = let min = Int 1 // Int 10 **/ Int length in let zero = Int 0 and one = Int 1 and two = Int 2 and three = Int 3 and four = Int 4 in let rec sum n an x = …

円周率を求めてみる

なんとなくやりたくなったからやってみた。 意外と素直にあっさり書けた。やっぱり有理数型があるとこういうの楽だなぁ。 使ったアルゴリズムは、円周率 - Wikipediaで見つけたこの式。 arcsin(x)のx=1/2におけるテイラー展開で、収束が速いらしい。へぇー。…

意外と知らない?ニコニコ動画の裏技

ニコニコ動画関連のスレをみるに、意外と皆さん知らないようなので書いてみます。 動画再生画面ではF5で更新できないけど、Ctrl+Rならできるよ!

Queueの二通りの定義の仕方

シグネチャの定義 # module type QUEUE = sig type 'a t exception Empty val empty: 'a t val add: 'a t -> 'a -> 'a t val take: 'a t -> 'a * 'a t val peek: 'a t -> 'a end;; module type QUEUE = sig type 'a t exception Empty val empty : 'a t val …

二分探索木を用いたテーブルの定義

# module type TABLE = sig type ('a, 'b) t val empty : ('a, 'b) t val add : 'a -> 'b -> ('a, 'b) t -> ('a, 'b) t val retrieve : 'a -> ('a, 'b) t -> 'b option val dump : ('a, 'b) t -> ('a * 'b) list end;; module type TABLE = sig type ('a, 'b…

任意精度の有理数計算によるNewton-Raphson法

# open Num;; # (* f'(x)を求める *) let deriv f = let dx = Int 10 **/ Int (-50) in fun x -> (f (x +/ dx) -/ f x) // dx;; val deriv : (Num.num -> Num.num) -> Num.num -> Num.num = <fun> # (* f(x), f(f(x)), f(f(f(x))), ..., を計算していき、ステップ</fun>…

書き換え可能なデータ構造を使ったキュー

いつもの如くまずは型の定義。 # type 'a mlist = MNil | MCons of 'a * 'a mlist ref;; type 'a mlist = MNil | MCons of 'a * 'a mlist ref # type 'a queue = {mutable head : 'a mlist; mutable tail : 'a mlist};; type 'a queue = { mutable head : 'a…

unit型を使った無限数列

# type 'a seq = Cons of 'a * (unit -> 'a seq);; type 'a seq = Cons of 'a * (unit -> 'a seq) # let rec from n = Cons (n, fun () -> from (n+1));; val from : int -> int seq = <fun> # let rec take n (Cons (x, f)) = if n > 0 then x :: take (n-1) (f </fun>…

素数の無限数列

# let rec prime_seq primes x = let x' = x + 1 in let rec is_prime n = function [] -> true | p :: rest -> p*p <= x' && n mod p <> 0 && is_prime n rest in if is_prime x' primes then Cons (x', prime_seq (x' :: primes)) else prime_seq primes x…

無限数列

整数の無限数列のジェネレータみたいなもの。 # type intseq= Cons of int * (int -> intseq);; type intseq = Cons of int * (int -> intseq) フィボナッチ数列のジェネレータ # let fib = let rec f x y = Cons (x, f (x+y)) in Cons (1, f 1);; 実際に計…

足し算・かけ算からなる数式を表す型

まずは型の定義。 # type arith = Const of int | Add of arith * arith | Mul of arith * arith;; type arith = Const of int | Add of arith * arith | Mul of arith * arith 式を評価する関数・文字列に変換する関数・展開する関数 # let rec eval = func…

久々OCaml

引き続き練習問題。 # type token = PCDATA of string | Open of string | Close of string;; type token = PCDATA of string | Open of string | Close of string # type ('a, 'b) xml = XLf of 'b option | XBr of 'a * ('a, 'b) xml list;; type ('a, 'b)…

昨日の続き(二分木とバラの木)

木構造の定義 # type 'a tree = Lf | Br of 'a * 'a tree * 'a tree;; type 'a tree = Lf | Br of 'a * 'a tree * 'a tree # type 'a rosetree = RLf | RBr of 'a * 'a rosetree list;; type 'a rosetree = RLf | RBr of 'a * 'a rosetree list # let rtree …

再帰的データ型(二分木)

さっそくデータ型を定義。大きさと深さを求める関数も定義。 # type 'a tree = Lf | Br of 'a * 'a tree * 'a tree;; type 'a tree = Lf | Br of 'a * 'a tree * 'a tree # let rec size = function Lf -> 0 | Br (_, left, right) -> 1 + size left + size …

再帰的データ型

さらに引き続きOCaml勉強中。この本を使って勉強しています。 プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~作者: 五十嵐淳出版社/メーカー: 技術評論社発売日: 2007/11/29メディア: 単行本(ソフトカバー)購入: 11人 クリック: 16…

多相的ヴァリアントとデータ構造とパターンマッチ

練習問題を解いたら結構長いコードになった。せっかくなので、記念カキコ。 作って満足してしまった。動作確認はまた今度。 (* 図形を定義 *) type figure = Point | Circle of float | Rectangle of float * float | Square of float;; (* 座標情報をもった…

引き続きOCaml

自然数rについて、x*x + y * y = rを満たす自然数(x, y)のリストを返す関数 ただし、x ≧ y ≧ 0 # let squares r = let isqrt n = int_of_float (sqrt (float_of_int n)) in let y_max = isqrt (r / 2) in let rec get_list y list = if y >= y_max then list…

KコンビネータとSコンビネータ

OCaml勉強中。KコンビネータとSコンビネータが出てきた。 OCamlでfun式と関数適用の組み合わせ「のみ」で表現できる関数はSとKのを関数適用で組み合わせることですべて表現できることが知られています。 # let s x y z = x z (y z);; val s : ('a -> 'b -> '…

H.264の動画

H.264、60fpsの動画をFirefoxで見たらカクカクしてた。IEで見たらヌルヌルだった。 これは、拡張入れすぎたのが悪いのだろうか。それとも、Firefox向けのFlashプラグインがショボいんだろうか。 Operaも同じプラグイン入ってるらしいけど、ヌルヌルだった。 …

テステス

ニコニコ動画がはてなに貼れるようになったらしい。だけど残念ながら今はメンテナンス中。マイリストに登録したお気に入り動画が貼れません。 しょうがないから、とりあえず唯一sm番号を覚えてしまった動画を貼っておきます。

ニコニコ動画(SP1)発表会に行ってきた。

自分がその場で理解したことのメモですから、多少誤解している点があるかもしれません。正しい情報はこちらで「ニコニコ動画」が「SP1」にバージョンアップ 「ムービーメーカー」無償配布 - ITmedia ニュース 開演前 12時15分受付開始、開会13時。自分は12時…

ニコニコ動画の時報に関する割とどうでもいい発見

あらかじめ再生画面にしたまま放置しておくと、時報の時間になっても時報が鳴りません。2、3時間くらい前から放置しておくといいようです。複数タブ開いた状態でも時報がエコーにならなかったので気づきました。まあ、時報キャンセル技としては全然実用的じ…