这是我的“转换”方法的签名:
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
答案 0 :(得分:3)
OCaml会为match
生成良好的代码,因此您可以尝试以下操作:
let complementary_helix_f = function
| G -> C
| C -> G
| A -> T
| T -> A
它也(或许)更容易阅读。
如果你真的需要担心速度问题,你应该对你的代码进行分析(在你完成整个工作之后)。