Представьте, что у вас есть функция типа max
, за исключением того, что она возвращает любое из двух значений, которое имеет наибольшее абсолютное значение. Похоже, это решило бы вашу проблему.
Затем вы можете начать, написав эту функцию.
В качестве дополнительного комментария не разрешено возвращать None
для некоторых вызовов функция и целочисленное значение для других вызовов. Они не одного типа.
Как еще один побочный комментарий, второй случай вашего совпадения будет соответствовать всем непустым спискам. Я думаю, что вы хотите, чтобы он соответствовал только спискам длины 1. Шаблон для такого списка [x]
(или вы можете использовать x :: []
, что эквивалентно).
Обновление
Вот базовая c структура для определения функции, которая имеет другую (вспомогательную) функцию внутри:
let myfunc a b =
let helper x y =
(* Definition of helper *)
in
(* Definition of myfunc with calls to helper *)
Вот конкретный пример, функция, которая возвращает самую длинную строку в своем список ввода:
let longest_string strings =
let max_string a b =
if String.length a >= String.length b then a else b
in
List.fold_left max_string "" strings
Вот реализация обычной функции max
, которая может дать вам некоторые идеи для написания похожих функций:
let max a b =
if a >= b then a else b