X; index(N, [_|Xs]) when N>0 -> index(N-1, Xs) 由于模式-6ren">
gpt4 book ai didi

erlang - 为什么在这个函数中使用了 "when"?

转载 作者:行者123 更新时间:2023-12-04 09:21:38 24 4
gpt4 key购买 nike

《Erlang Programming》中有这个索引函数:

index(0, [X|_]) -> X;
index(N, [_|Xs]) when N>0 -> index(N-1, Xs)

由于模式匹配,守卫“when N>0”不是多余的吗?调用 index(0, List) 永远不会出现在第二个子句中,因此 N 将始终 > 0。还是我在这里完全错了?

最佳答案

该函数在 N>=0 时正常工作。没有守卫,对于 N<0 它将遍历整个列表:

index(-2,[1,2,3]) -> index(-3,[2,3]) -> ... -> index(-5,[]) -> 错误。

这不是一个大问题,只是您可能会遇到一个令人困惑的异常。在具有无限列表的语言(Haskell、Ocaml)中,忘记该守卫可能会导致无限循环:index(-1, [0,0,0..])。

关于erlang - 为什么在这个函数中使用了 "when"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3434739/

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