Новичок ie здесь! Я пытаюсь создать программу, которая возвращает список с наибольшим числом по указанному c индексу. Я пробовал так много вещей, и это выглядит самым простым кодом, который я могу найти.
В приведенном ниже примере я ожидал список ["2"; "4"; "6"; "7 ";" 8 ";" 4 "] подлежит возврату. Однако я столкнулся с этой ошибкой:
Файл "blablabla.ml", строка 7, символы 63-74: Ошибка: это выражение имеет тип int, но ожидалось выражение типа 'список
Кто-нибудь может помочь?
let a = [["1";"2";"3";"4";"5";"6"];["2";"5";"6";"1";"5";"7"];["1";"2";"3";"4";"5";"6"];["2";"4";"6";"7";"8";"4"]];;
let rec max lista i = match lista with
| [] -> 0
| x::xs ->
let best_list = max xs i in
if (int_of_string(List.nth x i)) > (int_of_string(List.nth best_list i)) then
x
else
best_list
;;
let result = max a 4;;
result;;
РЕДАКТИРОВАТЬ: Все еще не удалось, благодаря @ G4143 и @glennsl мне удалось go с другим подходом, но знаю, жалуется с синтаксической ошибкой.
let max l i = match l with
| [] -> []
| x::xs ->
let rec compare_lists x xs i =
if i < (List.length xs) then
if (List.nth x i) > (List.nth xs i) then
x
else
xs
else
failwith "Position too large for list"
;;