2013-03-08 49 views
0

我需要你的帮助了。我想知道是否有可能在模式匹配中使用列表:seq(from,to)?下面是我试图实现的代码Erlang:混合列表:seq与模式匹配

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 

列表:与序列的情况下工作?

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

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

如果我给输入作为1125我希望输出是苹果。同样,如果我将输入作为1450输入,我希望输出为香蕉。我希望你们明白,我想做什么!

+0

你当然不想与百元素的列表匹配。你的例子就是这个意思。但是你似乎需要列表中的参数成员资格。 – 2013-03-08 21:57:28

回答

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; 
[...] 
+0

我想,你提出的解决方案是前进的方向!谢谢! – anishjp 2013-03-09 08:21:11

+0

好的,当我使用“andalso”时,出现语法错误。我错过了什么吗? 'product_selling_price_evaluate(productcode,standard_produce,Costprice)当productcode> = 1100并且产品代码<= 1199 -> Costprice * 10;' – anishjp 2013-03-09 13:25:36

+0

''''''l:12:语法错误之前:'<='' – anishjp 2013-03-09 13:27:02

1

你没有给出想要的输入,你的函数需要一个列表([11001,1101,1102,...,1189,1190])作为它的第一个参数,其中当你给出一个数字,即1100.

+0

哦,那么我不应该使用列表:seq那里!谢谢 – anishjp 2013-03-09 08:24:35

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; 
... 

<=是非法这里,使用=<代替。

+0

哦,说的是对的,我终于找到了!尽管谢谢! – anishjp 2013-03-09 14:38:26