0

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

list:seq 是否适用于案例?

让我用更简单的方式解释一下。我有以下情况

1100 to 1190   = Apples
1200 to 1300   = Oranges
1400 to 1500   = Bananas
1600 to 1700   = Berries

如果我将输入设为 1125,我希望输出为 Apples。同样,如果我将输入设为 1450,我希望输出为香蕉。我希望你们明白,我想要实现什么!

4

3 回答 3

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;
[...]
于 2013-03-08T20:13:46.447 回答
1

您没有提供所需的输入,您的函数需要一个 list([11001,1101, 1102,...,1189,1190]) 作为其第一个参数,而您提供的是一个数字,即 1100。

于 2013-03-08T20:01:36.983 回答
0

守卫可以用逗号分隔(,),它的含义相同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;
...

<=在这里是非法的,请=<改用。

于 2013-03-09T14:05:42.580 回答