Erlang:混合列表:seq与模式匹配



我再次需要你的帮助。我想知道是否可以在模式匹配中使用列表: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;
...

<=在这里是非法的,用=<代替

最新更新