【问题标题】:How to make a value_of_things function f#如何制作 value_of_things 函数 f#
【发布时间】:2016-01-20 20:40:31
【问题描述】:

嘿,伙计们,假设我有一个函数,可以获取当天某件商品的价格(以英镑为单位),然后乘以客户想要的英镑。即

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 * 10lbs) = $38 我尝试做 if 语句,以便当用户只想找出一件事的总成本而不是两者时。但我不断收到错误。我不知道如何将速率值存储在参数中,然后调用该函数。 这是我尝试过的

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 ;

【问题讨论】:

  • 发布您尝试的代码和错误。
  • 也许,你想要类似:dotnetfiddle.net/Nv7bXi
  • @Nick Morales,您的问题已经解决了吗?

标签: f# f#-interactive f#-3.0


【解决方案1】:

我认为您应该首先创建一个将成本/重量和重量转换为成本的通用函数。在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多