gpt4 book ai didi

list - Erlang:列表中匹配某个条件的第一个元素(不评估其余元素)

转载 作者:行者123 更新时间:2023-12-04 16:29:28 25 4
gpt4 key购买 nike

作为一个简单的例子,假设我有一个数字列表 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 */
}

最佳答案

嗯,像

firstmatch(YourList, Number) -> 
case lists:dropwhile(fun(X) -> X =< Number end, YourList) of
[] -> no_solution;
[X | _] -> X
end.

关于list - Erlang:列表中匹配某个条件的第一个元素(不评估其余元素),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12657202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com