簡単な例として、数値のリストがあり、L
特定の数値よりも大きい最初の要素を見つけたいとしますX
。私はこのようなリスト内包でこれを行うことができます:
(mynode@127.0.0.1)24> L = [1, 2, 3, 4, 5, 6].
[1,2,3,4,5,6]
(mynode@127.0.0.1)25> X = 2.5.
2.5
(mynode@127.0.0.1)26> [First | _] = [E || E <- L, E > X].
[3,4,5,6]
(mynode@127.0.0.1)27> First.
3
しかし、リストが非常に長く、最初の一致が早い可能性があるため、これは潜在的に非常に非効率的であるように思われます。だから私はどちらかを疑問に思っていますa)最初の一致が見つかった後にリスト内の残りの要素を評価しないこれを行うための効率的な方法はありますか?またはb)これがコンパイルされると、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 */
}