2013-03-08 52 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