(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);;"
答案 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);;