Всякий раз, когда вы видите сообщение об ошибке CamlinternalFormatBasics.fmt
, это означает, что задействована функция printf.Более того, если в первом параметре формата есть тип функции (здесь 'a -> 'b -> 'c
), ошибка заключается в том, что у printf слишком много аргументов по сравнению со строкой формата.
В вашем случае строка форматаis "%s \n"
, для которого требуется один аргумент, однако вы используете его с 3 аргументами:
Printf.printf "%s \n" (isRectangleIn a b c d) loop (k-1)
(Можно заметить, что в этом приложении функции и в типе функции столько же внешних аргументоввведите сообщение об ошибке.)
Основной причиной здесь является отсутствие ;
между выражением printf и loop (k-1)
:
Printf.printf "%s \n" (isRectangleIn a b c d);
loop (k-1)
Чтобы избежать такого рода проблем, обычно рекомендуетсяиспользовать ocp-indent (или ocamlformat) для автоматического отступа кода и избежать ложных отступов.Например, ocp-indent мог бы сдвинуть ваш код как
Printf.printf "%s \n" (isRectangleIn a b c d)
loop (k-1);;
, что свидетельствует о том, что printf
и loop
не совпадают с одним уровнем.