【发布时间】:2017-06-19 23:41:39
【问题描述】:
我是 FP 和 Haskell 的新手,正在尝试解决一些琐碎的任务。例如,我们有一系列产品:
data Product = Product String Int
let apple = Product "Apple" 15
let pineapple = Product "Pineapple" 20
let products = [apple, pineapple]
任务:
- 计算产品总价(这个很简单,比如我可以用 foldl)
- 如果每三个苹果有 0.5 的折扣,计算总价
- 每买两个苹果,如果菠萝是免费的,计算总价。
在传统的命令式编程中,这非常简单,例如我可以为此使用不同的计算策略。 我怎样才能在 Haskell 中解决这个问题?我应该使用 State monad 还是有其他解决方案?能否提供一些算法步骤或代码?
【问题讨论】:
-
除非菠萝/苹果的价格可以改变,否则这些都不需要
State- 只需过滤您的产品列表即可获得所有苹果或菠萝的数量。然后它只是归结为这两个数字的算术。
标签: haskell functional-programming monads