8

我一直在阅读有关组合器的文章,并看到它们有多么有用(例如,在 Haskell 的 Parsec 中)。我的问题是我不太确定如何实际使用它们。

这是问题的概要:可以生成、过滤和修改分布。可以组合分布以创建新分布。

基本接口是(在伪 Haskell 类型术语中):

generator::      parameters -> distribution

selector::       parameters -> (distribution -> distribution)

modifier::       parameters -> (distribution -> distribution)

现在,我认为我看到了三个组合器:

combine::     generator -> generator -> generator

filter::      generator -> selector -> generator

modify::      generator -> modifier -> generator

这些实际上是组合器吗?组合器是否有意义/我还缺少其他明显的组合器吗?

感谢您的任何建议。

4

1 回答 1

5

和函数已经是非常好的组合子了selectormodifier除了generator并且combine你可以做类似的事情(我将假设具体的统计分布并只是弥补!):

modifier (Scale 3.0) $ generator StandardGaussian `combine` selector (LargerThan 10) . modifier (Shift 7) $ generator (Binomial 30 0.2)

您可能需要对 combine 运算符的优先级进行一些处理才能使其顺利工作:)

一般来说,当我尝试为 type 的值设计一个组合器库时A,我喜欢将我A的 's “放在最后”,以便部分应用的组合器(你的selectormodifier)可以链接在一起,.而不必flip通过篮球。

这是一篇很好的博客文章,可以帮助您设计组合器,它影响了我的很多想法:语义编辑器组合器

编辑:鉴于combine. 也许我遗漏了一些东西,但分布不是你的组合器应该处理的更自然的对象吗?

于 2011-08-16T19:26:52.590 回答