Ocaml 中 if 和 else if 条件的问题(我正在学习语言)

问题描述 投票:0回答:1

所以我在大学学习 Ocaml,今年我们创建的代码有一些特殊的规则:没有循环或数组(我不知道为什么,但当我的一个朋友在考试中使用它们时,她几乎看起来很生气)所以我们必须处理仅递归的问题,在这里我必须创建一个代码来返回 (0,2) 和 (n,n+2) 之间的所有孪生素数,例如 3,5 5,7 或 11,13 所以我尝试这样做就这样:

let rec calculpj p q n =

    if q = p + 2 && n > 0 then begin

      if q mod p != 0 && p mod q != 0 then begin 
        print_int(p) ; 
        print_int(q) end
      else calculpj (p + 1) (q + 1) (n - 1) end

    else calculpj (p + 1) (q + 1) (n - 1) ;;
      
calculpj 3 5 3

但出于某种原因,我无法理解为什么最后一个“else”不使用新值重新启动递归,因为第一个“循环”按预期返回值。 如果有人想知道这个练习来自哪里,那就是来自一次考试,老师没有给我们答案,所以我没有任何东西可以纠正自己。

我尝试了很多方法,但由于我是 Ocaml 新手,我不知道如何找到导致问题的原因。

if-statement recursion ocaml
1个回答
0
投票

您有几个案例。其中之一是:

begin 
print_int(p) ; 
print_int(q)
end

这涵盖了两个

mod
值不为 0 的情况。请注意,这种情况到此为止。打印这两个int后就没有什么可做的了。这就是为什么您的代码在第一次后停止的原因。对
calculpj
的两次递归调用适用于其他情况。

© www.soinside.com 2019 - 2024. All rights reserved.