gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:31:11 24 4
gpt4 key购买 nike

我正在尝试将此 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 作为输入并输出 boolean。我的 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<=的含义在 C 和 < 中OCaml 中的情况有所不同。

关于c - 为什么 OCaml 中的 while 循环不能按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52283220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com