¿Qué significa esta firma de función en sml?

Estoy revisando algunas notas que mi profesor dio sobre el lenguaje SML y una de las funciones es la siguiente:

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

¿Podría alguien ayudar a explicar lo que está haciendo esto? Lo que más me confunde es la línea:

    let fun lp curr [] = curr

¿Qué significa esto exactamente? Por lo que sé, hay una función llamadalp pero que hace elcurr [] ¿media? Son estos argumentos? Si es así, ¿no está permitido solo un parámetro en sml?

Respuestas a la pregunta(2)

Su respuesta a la pregunta