为什么我在OCaml中的while循环无法按预期工作?

时间:2018-09-11 19:47:19

标签: c ocaml

我正在尝试将此C代码转换为OCaml代码,该代码应检查输入int是否为质数。我的C代码可以运行,但是我的ocaml代码甚至无法运行。

void is_prime(int pri){
    int a=2;
    int b=poww(a,2);
    while(b<=pri){
       int resu=pri%a;
       if(resu==0) {
            printf("False");
            return 0;
       }
       a++;
       b=poww(a,2);
    }
    printf("True");
}

这是我的OCaml代码:

let is_prime n = 
  let a= ref 2 in
  let b= ref (pow !a 2) in 
  let c= ref true in
  while !b<n do
    let resu= (n mod !a) in
    if resu=0 then c:=false;
    a:=!a+1;
    b:=(pow !a 2);
  done in
  if c=false then false
  else true
;;

我想要的是OCaml代码,将int作为输入并输出一个布尔值。我的OCaml代码中的pow是一个现有函数pow a b(其中a和b是int并输出a ^ b)。由于某种原因,该代码无法正常工作...

更新:问题已解决 有效的新Ocaml代码:

let is_prime n = 
  if n>1 then
    let a= ref 2 in
    let b= ref (pow !a 2) in 
    let c= ref true in

    while !b<n do
    (*ignore (Printf.printf "abc");*)
      let resu= (n mod !a) in
      if resu=0 then c:=false;
      a:=!a+1;
      b:=(pow !a 2);
    done;
    if !c then true
    else false
  else raise Domain
;;

1 个答案:

答案 0 :(得分:0)

一种可能性:您的C代码具有while (b <= pri)。您的OCaml代码包含while !b < n。 C语言中的<=和OCaml中的<的含义是不同的。