Точка с запятой также используется для завершения функций, которые используются для их побочных эффектов.Предупреждение появляется, когда тип возвращаемых данных этих функций не unit
(в данном случае int
);это всего лишь предупреждения, поскольку вы , возможно, намеревались использовать только побочные эффекты, обычно это ошибка.Это в стороне, но для подавления этих предупреждений программно и безопасно используйте функцию ignore
, как в ignore (x+2);
.
Возвращаясь к вашей проблеме, в ней (и расширяя точки с запятой до их эквивалентности;и изменяя переменные для каждой функции) вы на самом деле пишете,
(fun x ->
let _ = -x in
(fun y ->
let _ = y+2 in
(fun z -> z*z)))
Или, как указывает Гаше, другой пример,
(fun x ->
-x;
(fun y ->
y+2;
(fun z -> z*z)))
Вы можете отличить от возвращенного типа, (int -> int -> int -> int) list
что-то мгновенно не в ваших намерениях.Вам нужно добавить круглые скобки вокруг каждого, например (fun x -> x+2);
, чтобы создать список.