这是一个功课。 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 = ~
答案 0 :(得分:4)
如果你没有无偿地侮辱他们的语言,你会得到更好的专家回复:-)但我是一个随和的人,所以我会抓住你的语法错误
此代码中存在相当多的问题。以下是我看到的3个:
符号;;
用于告诉口译员您已输入要评估的完整表达式。它在功能声明中肯定是不合适的。
您的第二个let
没有关联的in
。每个let
后面必须有一个in
。唯一的例外是在模块的顶层定义值(例如prime
函数)。
表达式divisor n a-1
被解析为(divisor n a) - 1
。你想要这样的括号:divisor a (n - 1)
。