Почему мой цикл while в OCaml не работает должным образом? - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь перевести этот код 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 в качестве входных данных и выводит логическое значение. pow в моем коде OCaml - это существующая функция 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 голосов
/ 11 сентября 2018

Одна возможность: ваш код C имеет while (b <= pri). Ваш код OCaml имеет while !b < n. Значения <= в C и < в OCaml различны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...