Как я могу написать функцию в OCaml, которая принимает список целых чисел и возвращает элемент с максимальным абсолютным значением - PullRequest
0 голосов
/ 09 апреля 2020

Я пытался написать код, но он возвращает только максимальное значение, а не абсолютное значение.

let rec maxAbsolutenumber_L l =
    match l with 
    |[] -> None
    |x::_ -> x
    |x::xs -> max x (max_number_list xs)

1 Ответ

1 голос
/ 09 апреля 2020

Представьте, что у вас есть функция типа 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...