将Log2球拍功能重写为OCaml功能?

时间:2015-11-05 17:28:18

标签: scheme ocaml racket

(define log2 
        (lambda (n) (if (= n 1) 0 (+ 1 (log2 (quotient (+ n 1) 2))))))

我正在尝试学习如何在OCaml中创建一个函数,到目前为止我已经想出了这个。

let rem x y =                    (* I found this helper function from google*)
        let rec aux acc i n =
        if i=n then acc else
        if acc+1=y then aux 0 (i+1) n else
        aux (acc+1) (i+1) n in
        aux 0 0 x;;

let rec log2 x = 
        match x with
        | 1 -> 0
        | 1 + log2 (rem x+1 2);;

我无法弄清楚我正在使用的最后一个表达式。我想知道添加1和调用log2函数的方法" 1 + log2(rem x + 1 2);;"

2 个答案:

答案 0 :(得分:1)

几条评论:

如果您只想知道$(document).on('click', '#read-less', function (event) { $(this).parent().trunk8(); return false; }); = 1,x语句可能比匹配更清晰。

在我看来,方案函数if对应于OCaml quotient运算符(至少在这种情况下)。我认为不需要/

rem的最后一个案例(如果你想使用匹配)看起来像这样:

match

(但是,我认为您不需要使用| _ -> 1 + log2 (rem (x + 1) 2) 或匹配。)

答案 1 :(得分:0)

 | x -> 1 + log2 (rem x+1 2);;