Что означает подпись этой функции в sml?

Я просматриваю некоторые заметки, которые дал мой профессор относительно языка SML, и одна из функций выглядит следующим образом:

fun max gt = 
    let fun lp curr [] = curr
           | lp curr (a::l) = if gt(a,curr)
                             then lp a l
                             else lp curr l
in
    lp
end

Может ли кто-нибудь помочь объяснить, что это делает? Больше всего меня смущает строка:

    let fun lp curr [] = curr

Что именно это значит? Насколько я могу судить, есть функция под названиемlp но чтоcurr [] значит? Это аргументы? Если так, разве вам не разрешен только один параметр в sml?

Ответы на вопрос(2)

Ваш ответ на вопрос