gpt4 book ai didi

erlang - 如何在列表与单个元素上进行模式匹配

转载 作者:行者123 更新时间:2023-12-02 04:43:44 25 4
gpt4 key购买 nike

我试图了解如何在 Erlang 中对单个元素与列表进行模式匹配:

guarded(T) when T>5 ; T<3 -> 3+T;
guarded([X,Y]) when X>3,Y>3 ->{X+1,Y+1};
guarded([X,_|[T,_]]) when X rem 2==0, T rem 2 =/= 1-> [T,X];
guarded(_)->"something else".



guarded([1,2,3]). -> goes into case 1 , how can i make sure it doesn't (and goes to last case)

** exception error: an error occurred when evaluating an arithmetic expression in function main:guarded/1

当我想在单个元素上进行模式匹配时,我需要在哪里放置第一个案例。我的意思是我想要一个适用于单个元素和通配符模式的案例(最后一个表达式)。

最佳答案

您可以添加 is_list/1请向您的守卫检查 T 是否不是一个列表:

guarded(T) when not is_list(T) andalso (T>5 orelse T<3) -> 3+T;
guarded([X,Y]) when X>3, Y>3 ->{X+1,Y+1};
guarded([X,_|[T,_]]) when X rem 2==0, T rem 2 =/= 1-> [T,X];
guarded(_)->"something else".

或者您可以使用is_number/1is_integer/1检查 T 分别是数字还是整数:

guarded(T) when is_number(T) andalso (T>5 orelse T<3) -> 3+T;
guarded([X,Y]) when X>3, Y>3 ->{X+1,Y+1};
guarded([X,_|[T,_]]) when X rem 2==0, T rem 2 =/= 1-> [T,X];
guarded(_)->"something else".

关于erlang - 如何在列表与单个元素上进行模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56921175/

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