开始学习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)
函数返回的布尔值。
也许有一种更简单的书写方式(嘿,我是新来的),但是我想了解这里的逻辑。
答案 0 :(得分:2)
问题出在以下表达式中:
gf x 1 && gs x 1
&&
运算符在左侧和右侧采用布尔值,然后返回布尔值。但是您的gf
和gs
函数各自返回一对整数。编译器告诉您,您有一对整数(int * int
),但是您 需要一个布尔值(作为&&
运算符的操作数)。