読者です 読者をやめる 読者になる 読者になる

きくらげ観察日記

好きなことを、適当に。

Smith-Waterman法で配列の局所アラインメントを求める

今度は局所アラインメントを求めます。 前回の大域アラインメントと違って、今度は最も一致度の高い部分文字列を求めるアルゴリズムになります。 type alignment = char option list let maximums_by (key : 'a -> 'b) (lst : 'a list) : 'a list = let rec …

OCamlの値の比較について

OCamlには2種類の値の比較方法があります。 ==, != これらの演算子は、右辺と左辺が全く同一のオブジェクトであるかを判定します。==という名前は大抵の言語で使われているので、つい癖で値の比較に使用してしまいそうですが、この演算子はむしろSchemeのeq?…

OCamlのmatch文とbegin..end

OCamlにはオフサイドルールは無いので、例えばmatch文をネストした時に、 let rec zip xs ys = match xs with | x :: xs' -> match ys with | y :: ys' -> (x, y) :: zip xs ys | [] -> [] | [] -> [] これは次のように解釈されます。 let rec zip xs ys = m…

OCamlのFunctorという概念を知らずに自分で再発明していた話

最近わけあってOCamlの勉強をしているのですが、OCamlは多相的な関数を定義する方法として、Functorというものを持っています。 (* 要素の型と、その比較方法を定義するモジュール *) module type Cmp = sig type elt val le : elt -> elt -> bool (* <= *) …

OCaml初心者が戸惑いそうな謎記号一覧

^(キャレット) ^は文字列連結の演算子です。 # "hoge" ^ "fuga";; - : string = "hogefuga" +., -., *., /. 浮動小数点数同士の演算には、元の演算の記号の後にドットが付きます。Schemeと同じですね。 # 3.0 +. 4.0;; - : float = 7. <> <>はノットイコール…