提高简单功能的效率

时间:2013-02-10 00:03:16

标签: ocaml

这是我的“转换”方法的签名:

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

1 个答案:

答案 0 :(得分:3)

OCaml会为match生成良好的代码,因此您可以尝试以下操作:

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

它也(或许)更容易阅读。

如果你真的需要担心速度问题,你应该对你的代码进行分析(在你完成整个工作之后)。