Erlang: первый элемент в списке, соответствующий некоторому условию (без оценки остальных элементов)

В качестве простого примера, предположим, у меня есть список номеровL и я хочу найти первый элемент, который больше определенного числаX, Я мог бы сделать это со списком пониманий, как это:

([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

Но это кажется потенциально очень неэффективным, поскольку список может быть очень длинным, и первый матч может быть на ранней стадии. Поэтому мне интересно: а) Есть ли эффективный способ сделать это, чтобы не оценить остальные элементы в списке после того, как найдено первое совпадение? или б) Когда это компилируется, оптимизирует ли Erlang остальные сравнения?

Вот как я бы достиг того, что искал в 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 */
}

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

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