Ошибка при создании функции, чтобы найти самый большой элемент в списке - PullRequest
0 голосов
/ 29 декабря 2018

Я хочу создать функцию, которая возвращает наибольшее значение в данном списке. Вот что я сделал:

let findMax aalist: 'a list=
    let rec helper (l:'a list,m:'a)=
        match m,l with
        |m,li::lf-> if compare m li<0 then helper (lf,li)
                    else helper (lf,m) 
        |m,[] -> m
    helper(aalist, aalist.Head )

Но я получаю ошибки при попытке запустить функцию:

enter image description here

Я не знаю, является ли это лучшим способом создания этой функции.Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Проблема в вашем объявлении параметра.

Это:

let findMax aalist: 'a list=

должно быть:

let findMax (aalist: 'a list) =

Когда скобки не используются, компилятор считает, что вы указываете тип возвращаемого значения функции.Если тип возвращаемого значения 'a list, тогда параметр aalist должен быть списком списков: 'a list list.

Если вы вообще не указываете какие-либо типы, компилятор правильно выводит тип findMax as 'a list -> 'a.

Правило всегда указывает типы параметров в скобках.

0 голосов
/ 29 декабря 2018

Удалите аннотацию типа list, чтобы вы получили следующее:

let findMax aalist: 'a =
    let rec helper (l:'a list,m:'a) =
        match m,l with
        | m,li::lf -> if li > m then helper (lf,li)
                        else helper (lf,m) 
        | m,[] -> m
    helper(aalist, aalist.Head)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...