我再次需要你的帮助。我想知道是否可以在模式匹配中使用列表:seq(from,to) ?下面是我想要实现的代码
product_selling_price_evaluate(lists:seq(1100,1190),standard_produce,Costprice) -> Costprice*10;
product_selling_price_evaluate(lists:seq(1200,1300),standard_produce,Costprice) -> Costprice*20;
product_selling_price_evaluate(lists:seq(1400,1500),standard_produce,Costprice) -> Costprice*30;
product_selling_price_evaluate(lists:seq(1600,1700),standard_produce,Costprice) -> 40*Costprice.
当我编译代码时,它给了我一个非法的模式错误!
示例输入为
selling_price:product_selling_price_evaluate(1100,standard_produce,10).
,我想让它找到第一个匹配并给出输出
100
lists:seq可以和case一起使用吗?
让我用更简单的方式来解释。我有以下情况
1100 to 1190 = Apples
1200 to 1300 = Oranges
1400 to 1500 = Bananas
1600 to 1700 = Berries
如果我输入1125,我希望输出是苹果。如果输入是1450,我希望输出是香蕉。我希望你们明白,我想要达到什么目标!
如果我没理解错的话,你想要的可能是守卫。
像这样(未测试):
product_selling_price_evaluate(N,standard_produce,Costprice) when N >= 10 andalso N <= 20 -> Costprice*10;
product_selling_price_evaluate(N,standard_produce,Costprice) when N >= 21 andalso N <= 30 -> Costprice*20;
[...]
你没有给出想要的输入,你的函数期望一个列表([11001,1101,1102,…,1189,1190])作为它的第一个参数,而你给的是一个数字,即1100。
可以用逗号分隔,与andalso
意义相同。
product_selling_price_evaluate(N,standard_produce,Costprice)
when 10 =< N, N =< 20 -> Costprice*10;
product_selling_price_evaluate(N,standard_produce,Costprice)
when 21 =< N, N =< 30 -> Costprice*20;
...
<=
在这里是非法的,用=<
代替