【发布时间】:2019-11-17 03:46:40
【问题描述】:
我试图了解如何在 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)
** 异常错误:计算算术表达式时发生错误 在函数 main:guarded/1
当我想对单个元素进行模式匹配时,我需要将第一个案例放在哪里。我的意思是我想要一个适用于单个元素和通配符模式的案例(最后一个表达式)。
【问题讨论】:
-
除了已经给出的答案之外,有趣的是,erlang 中的类型是有序的,因此任何类型的两个变量之间的比较总是有效的,并且将返回 true 或 false。例如,任何列表都大于任何数字。这就是为什么你的第一个语句总是匹配的原因,除非 T 是 3 到 5 之间的数字。
-
您发表评论前 4 小时已在答案中描述了这一点,因此您再次看起来像是在抄袭人们的答案。
-
没关系,对我来说这是有价值的信息,发现列表可以与数字进行比较,并且默认情况下被视为大于数字。