OCAML:嵌套的递归

时间:2018-10-01 23:17:43

标签: ocaml

开始学习OCAML。
假设我们有一个检查功能:

let check x y = if (y mod x) = 0 then true else false;;

然后对于任何给定的夫妇a b,我想迭代找到满足的夫妇i j:1

let g (x, y) = 
      let rec gf i j = 
    if check i j then (i, j) else gs i j 
      and gs i j = 
    if check i j then (i, j) else 
          if j <= y then gs i (j + 1) else
        if i > 1 then gf (i - 1) j else (-1, -1)
         in (gf x 1 &&  gs x 1);;

但是我得到了错误:

Error: This expression has type int * int
       but an expression was expected of type bool

我看不到该g (x, y)函数返回的布尔值。 也许有一种更简单的书写方式(嘿,我是新来的),但是我想了解这里的逻辑。

1 个答案:

答案 0 :(得分:2)

问题出在以下表达式中:

gf x 1 && gs x 1

&&运算符在左侧和右侧采用布尔值,然后返回布尔值。但是您的gfgs函数各自返回一对整数。编译器告诉您,您一对整数(int * int),但是您 需要一个布尔值(作为&&运算符的操作数)。