2016-01-20 43 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