Ocaml,为什么这段代码不起作用?
Ocaml, why this code does not work?
let rec prime : int -> bool
= fun n -> let rec f a = if (a = 1) then 1
else if (n mod a) = 0 then 0
else if ((f a-1) = 1) then 1
else 0
in
if ((f n-1) = 1) then true
else false
正如您从我的代码中看到的那样,我想实现一个可以判断给定数字是否为质数的函数。
我可以编译 运行 这段代码,但对于所有 X 函数,请告诉 "false"。
为什么会这样?
提前致谢。 :)
表达式:
f n-1
解析如下:
(f n) - 1
你需要这样写:
f (n - 1)
((f n-1) = 1)
f n-1
等同于 (f n) - 1
,而不是 f (n - 1)
。因此,您要取一个 0 或 1 的数字,然后从中减去 1(得到 -1 或 0),然后查看它是否为 1,它永远不会是 1。
请注意,如果您将 f
return 设为布尔值而不是整数(您不能从布尔值中减去),这甚至不会编译。
let rec prime : int -> bool
= fun n -> let rec f a = if (a = 1) then 1
else if (n mod a) = 0 then 0
else if ((f a-1) = 1) then 1
else 0
in
if ((f n-1) = 1) then true
else false
正如您从我的代码中看到的那样,我想实现一个可以判断给定数字是否为质数的函数。
我可以编译 运行 这段代码,但对于所有 X 函数,请告诉 "false"。
为什么会这样?
提前致谢。 :)
表达式:
f n-1
解析如下:
(f n) - 1
你需要这样写:
f (n - 1)
((f n-1) = 1)
f n-1
等同于 (f n) - 1
,而不是 f (n - 1)
。因此,您要取一个 0 或 1 的数字,然后从中减去 1(得到 -1 或 0),然后查看它是否为 1,它永远不会是 1。
请注意,如果您将 f
return 设为布尔值而不是整数(您不能从布尔值中减去),这甚至不会编译。