1

これは、私の「変換」メソッドの署名です。

let rec transform (f: -> 'a -> 'b) (l: 'a list): 'b list =
begin match l with
| [] -> []
| hd :: rest -> (f hd) :: (transform f rest)
end

アイデアは、ヌクレオチドの補数を見つけたいということです。G は C と相補的であり、A は T と相補的です。

これは私が自分の関数を実装した方法ですが、ネストされた if ステートメントの束よりも効率的な方法があるのではないかと考えていました。

type nucleotide = G | C | A | T
type helix = nucleotide list

let complementary_helix_f: nucleotide -> nucleotide =
fun (n: nucleotide) -> if n = G then C
                       else if n = C then G
                       else if n = A then T
                       else A
4

1 に答える 1

3

OCaml は に適したコードを生成するmatchので、次のことを試してみてください:

let complementary_helix_f = function
| G -> C
| C -> G
| A -> T
| T -> A

また、(おそらく)少し読みやすくなっています。

本当に速度を気にする必要がある場合は、コードをプロファイリングする必要があります (すべてが機能するようになった後)。

于 2013-02-10T00:09:41.040 に答える