作为函数式编程练习,我认为我会编写一个小程序,以毫米盈利的方式对制作食谱进行排序。函数式编程练习
在OO语言中,我会为每个配方制定策略对象,其中Cost(),ExpectedRevenue()和Volume()为成员。然后,我将所有对象放在一个列表中,并按盈利/时间函数对它们进行排序。
试图在F#中完成相同的结果,但我不确定如何去做。我有一些脱节的成本函数,例如:
let cPM (ss,marble) = (15.0 * ss + 10.0 * marble + 0.031)/5.0
let cTRef (tear,clay) = (tear + 10.0 * clay + 0.031)/5.0
,然后收入和体积的定义,如:
let rPM = 1.05
let vPM = 50
,但我不知道现在该做什么。做一个看起来像
(name: string, cost:double, revenue:double, volume:int)
然后排序列表?这感觉就像我错过了一些东西 - 仍然在面向对象思考,更不用说以这种方式添加新的食谱将是相当尴尬。
有没有人有更好的方式使用功能概念的任何提示?这种计算问题似乎很适合功能风格。
非常感谢。
定义问题域的一个好方法绝对是我迄今尝试过的方法所缺乏的。不知道我按照如何使用匹配函数,或者'g'和's'的作用。 FancySword的lambda中是否已经存在数量('2.0','15.0')和价格('prices.Gold','prices.Steel')?游戏是刀锋和灵魂,顺便说一句:) – Osan
是的,我对这个问题的理解是有限的:-)。我的想法是这个配方有一些参数(你需要一定数量的青蛙腿来创造魔法石),然后你在游戏中拥有一些全球黄金价值(来自'价格')。如果成本不依赖于外部价格,那么你可以把所有的信息放在'Recipe'的情况下 - 这可能就是你的例子。 –