我希望能够以多种方式表达某种特定类型的Measure
。这是一个非常古怪的例子。
- 如果我们正在煮羔羊肉,那么我们将需要3汤匙橄榄油,1杯糖和3盎司黄油。
- 如果我们正在做馅饼,那么我们将需要10汤匙橄榄油和1盎司盐
- 如果我们要烹饪牛排,那么我们将需要5盎司盐,4磅冰淇淋。
我有不同的测量方法:
[<Measure>] type Tablespoon
[<Measure>] type Ounce
[<Measure>] type Pounds
我们还有要烹饪的不同食物:
type Foods =
| Lamb
| Pie
| Steak
我们如何创建记录/函数/某些东西来代表上面的配方?
我正在尝试对类似的东西进行建模:
随附产品的衡量标准是什么?随行 献给公羊或母羊的是细面粉的isaron12 用四分之一的一分之十三的油和一四分之一的酒作为 葡萄酒解放。这些也是山羊的[附带产品] 不论是小型的还是大型的15,无论是雌雄,还是母羊, 即使她很大。但是,公羊随附的产品 是两个esronim混合了三分之一的石油和三分之一的石油 酒之欣为解放。牛或牲畜的配套产品 小牛,不论是雄性还是雌性,都是将三个伊斯洛宁(sronim)与一半的 解放了油的一欣和酒的一半。
随动物的种类(绵羊/山羊/公羊)而不同,每种随行的动物也不同。
答案 0 :(得分:3)
为满足您的需要,我可能不使用F#的度量单位系统,而是将您的单位建模为有区别的联合。原因是因为F#的度量单位被视为完全不同的类型,所以您无法编写类似[ 3.0<Tablespoon>; 0.5<Cup> ]
的列表,因为F#会引发类型错误。但是,您可以执行以下操作:
type RecipeUnit =
| Tablespoon
| Cup
| Ounce
| Pound
type Ingredient =
| Butter
| OliveOil
| Sugar
| Salt
type RecipePart = { Amount: float
Unit: RecipeUnit
Item: Ingredient }
let pie = [
{ Amount = 10.0; Unit = Tablespoon; Item = OliveOil }
{ Amount = 1.0; Unit = Ounce; Item = Salt }
]
或者,以您的实际数据模型为例:
type Unit =
| Isaron
| Hin
type Ingredient =
| Flour
| Oil
| Wine
type OfferingPart = { Amount: float
Unit: Unit
Item: Ingredient }
type Offering = OfferingPart list
let sheepOffering = [
{ Amount = 1.0; Unit = Isaron; Item = Flour }
{ Amount = 1.0 / 4.0; Unit = Hin; Item = Oil }
{ Amount = 1.0 / 4.0; Unit = Hin; Item = Wine }
]
let goatOffering = sheepOffering
let ramOffering = [
{ Amount = 2.0; Unit = Isaron; Item = Flour }
{ Amount = 1.0 / 3.0; Unit = Hin; Item = Oil }
{ Amount = 1.0 / 3.0; Unit = Hin; Item = Wine }
]
// Etc.
请注意,1.0 / 3.0
是不精确的;如果这是一个问题,则需要对有理分数建模(作为元组或2项记录;我假设您不需要这方面的帮助)。
P.S。我假设“ esronim”是“ isaron”的复数,并且在公羊祭中提到的两个esronim是面粉。如果我错了,请相应调整示例。