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

问题描述 投票:-2回答:1

我试图将此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
;;
c ocaml
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.