OCAML: вложенные рекурсии - PullRequest
       6

OCAML: вложенные рекурсии

0 голосов
/ 02 октября 2018

Начинаем изучать OCAML.
Предположим, у нас есть одна проверочная функция:

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

Затем для любой данной пары ab я хотел бы повторить, чтобы найти пару ij, которая удовлетворяла бы: 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 голосов
/ 02 октября 2018

Проблема в этом выражении:

gf x 1 && gs x 1

Оператор && принимает логическое значение слева и справа и возвращает логическое значение.Но ваши функции gf и gs возвращают пару целых.Компилятор говорит вам, что у вас есть пара целых (int * int), но вам нужно логическое значение (в качестве операнда оператора &&).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...