我正在尝试将此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
;;
答案 0 :(得分:0)
一种可能性:您的C代码具有while (b <= pri)
。您的OCaml代码包含while !b < n
。 C语言中的<=
和OCaml中的<
的含义是不同的。