Ber*_*ian 2 erlang pattern-matching
我试图了解如何在Erlang中对单个元素vs列表进行模式匹配:
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)
Run Code Online (Sandbox Code Playgroud)
**异常错误:在函数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".
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用is_number/1
或is_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".
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
113 次 |
最近记录: |