Предположим, у вас есть последовательность выражений, которые могут вызвать исключение.Если это произойдет, вы хотите, чтобы произошел какой-то долгий процесс.Если это не так, вы хотите, чтобы произошел другой длительный процесс.В императивных языках вы обычно можете сделать что-то вроде
try:
...
except:
...
, но я не могу воспроизвести это в OCaml, потому что кажется, что вы можете проверять только одно выражение за раз для исключения.Я также не понимаю, как вы можете использовать значение, если оно существует, или сделать что-то еще, если это не так.
Для более конкретного, если тривиальный пример: у меня есть функция list_max
, которая возвращает максимум списка, если он не пустой, и вызывает исключение, если он пустой.Предположим, у меня есть список, и я хочу утверждать, что его максимум равен 4, но я ошибаюсь, и это действительно пустой список.Я не могу понять синтаксис правильно из объяснений, которые я нашел.Я попробовал следующее и много перестановок на нем:
try (list_max [])
with
| Failure s -> -1
| _ -> assert (list_max [] = 4);;
[Edit: скорее, чем надуманный пример выше, возможно, такой, который имеет больше смысла:функция.Я знаю, что могу сделать
assert ( (list_max [1;2;3] = 3 );;
Но как мне проверить, что list_max
правильно выбрасывает исключение в пустой список?]