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 回答