我目前正在尝试创建一个函数,说明数字是否为素数。
以下是我所做的:
let is_prime k =
for i = 2 to (k-1) do
if k mod i = 0 then print_string "Not prime"
done;
print_string "Prime"
您可能已经注意到问题是当我打印Not prime时,它不会停止该功能。
我想知道是否有办法停止该功能,例如在打印后立即返回()
" Not prime"。
我知道通过模式匹配它会返回一些内容并停止该功能,但我的问题是针对我们没有使用模式匹配的情况。
也许像return
这样的关键字与其他编程语言一样?
此外,如果我希望我的函数返回true
或false
,我就无法执行以下操作:
let is_prime k =
for i = 2 to (k-1) do
if k mod i = 0 then false
done;
true
它根本不起作用。
答案 0 :(得分:2)
我觉得它能回答你的问题。如果你使用异常来打破循环,那么你可以接管并做任何你想做的事情:
let is_prime k =
try
for i = 2 to (k-1) do
if k mod i = 0 then raise Exit
done;
print_string "Prime"
with Exit -> print_string "Not prime"
您甚至可以返回boolean
:
let is_prime k =
try
for i = 2 to (k-1) do
if k mod i = 0 then raise Exit
done;
print_string "Prime";
true
with Exit ->
print_string "Not prime";
false
根据ChrisVine的建议编辑
以下是一种更为惯用的方法,可以在不使用模式识别的情况下执行您想要的操作:
let is_prime k =
let rec is_prime' i k =
if i < k - 1
then
if k mod i = 0
then print_string "Not prime"
else is_prime' (i + 1) k
else
print_string "Prime";
in
is_prime' 2 k
但请注意,使用模式识别的vonaka解决方案是首选方式。