我需要你的帮助。我想知道是否可以在模式匹配中使用列表: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
会列出:seq与案例一起工作吗?
让我以更简单的方式解释。我有以下案例
1100 to 1190 = Apples
1200 to 1300 = Oranges
1400 to 1500 = Bananas
1600 to 1700 = Berries
如果我将输入设为1125,我希望输出为苹果。再次,如果我将输入作为1450,我希望输出为香蕉。我希望你们明白,我想要实现的目标!
答案 0 :(得分:3)
如果我正确地解释你想要实现的目标,你可能正在寻找的是守卫。
像这样(未经测试):
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;
[...]
答案 1 :(得分:1)
你没有提供所需的输入,你的功能是期待一个列表([11001,1101,1102,...,1189,1190])作为它的第一个参数,你给出一个数字,即1100
答案 2 :(得分:0)
Guards可以是逗号分隔(,),它与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;
...
<=
在此非法,请改用=<
。