Erlang: Primeiro elemento em uma lista que corresponde a alguma condição (sem avaliar o restante dos elementos)

Como um exemplo simples, suponha que eu tenha uma lista de númerosL e eu quero encontrar o primeiro elemento que é maior que algum número específicoX. Eu poderia fazer isso com compreensões de lista como esta:

([email protected])24> L = [1, 2, 3, 4, 5, 6].              
[1,2,3,4,5,6]
([email protected])25> X = 2.5.
2.5
([email protected])26> [First | _] = [E || E <- L, E > X].  
[3,4,5,6]
([email protected])27> First.
3

Mas isso parece potencialmente muito ineficiente, já que a lista poderia ser muito longa e a primeira partida poderia ser no começo. Então eu estou querendo saber se a) Existe uma maneira eficiente de fazer isso que não irá avaliar o resto dos elementos na lista após a primeira correspondência ser encontrada? ou b) Quando isso é compilado, o Erlang otimiza o restante das comparações de qualquer maneira?

É assim que eu alcançaria o que estou procurando em C:

int first_match(int* list, int length_of_list, float x){
    unsigned int i;
    for(i = 0; i < length_of_list, i++){
        if(x > list[i]){ return list[i]; } /* immediate return */
    }
    return 0.0; /* default value */
}

questionAnswers(3)

yourAnswerToTheQuestion