2016-01-20 26 views
0

嘿,让我们说,我有一个函数,获取当天的费用,英镑,并乘以多少磅的客户需要的速度。即如何使value_of_things函数f#

let convert_func (crab_rate, lobster_rate); 

//and then on a certain day it is 
let (crab_rate, lobster_rate) = convert_fun(3.4, 6.8); // $3.8 a pound for crab, $6.8 a pound for lobster. 
// 10 being how many pounds i want. 
crab_rate10 ; 

然后我出去放就不管38,因为($ 3.8 * 10磅)= $ 38 我试图做的,如果语句,这样当用户只是想找出一两件事,而不是两者的总成本。但我不断收到错误。我无法弄清楚如何在参数中存储费率值,然后调用函数。 这就是我想

let crab_rate (pound, rate) = (float pound) * rate; 
let lobster_rate (pound, rate) = (float pound) * rate; 

let convert_func (crab_rate, lobster_rate)= function (first,second) -> 
if crab_rate then (float pound) * rate; 
elif lobster_rate (float pound) * rate; 


let (crab_rate, lobster_rate) = convert_fun(3.4, 6.8); // $3.8 a pound for crab, $6.8 a pound for lobster. 
// 10 being how many pounds i want. 
crab_rate10 ; 
+0

安置自己的企图代码和错误。 –

+0

也许,你想要的东西是这样的:https://dotnetfiddle.net/Nv7bXi –

+0

@Nick Morales,你的问题已解决? –

回答

0

,我认为你应该做一般性功能转换成本/重量,重量为成本开始。在F#中,你甚至可以用计量单位,以帮助您:

[<Measure>] type USD // Unit of measure: US Dollars 
[<Measure>] type lb // Unit of measure: lbs 

let priceForWeight rate (weight : float<lb>) : float<USD> = 
    rate * weight 

约咖喱参数函数式语言的好处是,我们可以很容易地使用部分功能应用。这意味着当我们有一个有两个参数的函数时,我们可以选择只提供一个参数,并从结果剩下的一个参数中取回一个新函数。

因此,我们可以定义另一对使用此priceForWeight函数的函数。

let crabPriceForWeight weight = priceForWeight 3.8<USD/lb> weight 
let lobsterPriceForWeight weight = priceForWeight 6.8<USD/lb> weight 

请注意,我们使用了我们的原始函数来定义两个固定费率的新函数。

然后我们就可以评价它是这样的:

let crabPrice10 = crabPriceForWeight 10.0<lb> // result 38.0<USD> 

当然,你也可以定义返回两个价格一起作为一个供给的加权元组函数:

let crabAndLobsterPriceForWeight weight = 
    crabPriceForWeight weight, lobsterPriceForWeight weight