制作isPrime函数时出现问题

时间:2016-09-30 00:29:50

标签: ocaml primes

这是一个功课。 OCaml似乎是由精神病患者制作的。

    let prime : int -> bool
= fun n ->
    if n > 2 then 
        let a = n - 1 in
        let rec divisor n a =
            if a > 1 && n mod a = 0 then false
        else if a = 2 && n mod a <> 0 then true
        else divisor n a-1 ;;
    else if n = 2 then true
    else if n = 1 then false

我不擅长编码,我知道我的isPrime算法错了。 但我想知道在我的代码中哪里出现了产生语法错误的错误。

还有什么办法以递归形式定义isPrime函数吗?

示例:

let rec prime n = ~

1 个答案:

答案 0 :(得分:4)

如果你没有无偿地侮辱他们的语言,你会得到更好的专家回复:-)但我是一个随和的人,所以我会抓住你的语法错误

此代码中存在相当多的问题。以下是我看到的3个:

  1. 符号;;用于告诉口译员您已输入要评估的完整表达式。它在功能声明中肯定是不合适的。

  2. 您的第二个let没有关联的in。每个let后面必须有一个in。唯一的例外是在模块的顶层定义值(例如prime函数)。

  3. 表达式divisor n a-1被解析为(divisor n a) - 1。你想要这样的括号:divisor a (n - 1)