我试图将此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代码有while (b <= pri)
。您的OCaml代码有while !b < n
。在OCaml中C和<=
中<
的含义是不同的。