Pravděpodobnostní Funkcionální programování Knihovna pro Haskell


Original: http://web.engr.oregonstate.edu/~erwig/pfp/

Knihovna PFP je sbírka modulů pro Haskell, který usnadňuje pravděpodobnostní funkční programování, to znamená, že programování pomocí náhodných hodnot. Pravděpodobnostní funkcionální programovací přístup je založen na datový typ pro reprezentaci distribuce. Distribuce představují výsledek pravděpodobnostní události jako sbírka všech možných hodnot označených s jejich pravděpodobnosti.

Distribuce může představovat události, jako je role umřít nebo hozením mince. Například, nebo například výsledkem hodu lze vyjádřit následujícím způsobem.

die :: Dist Int
die = jednotné [1 .. 6]

Vyhodnocení zemřít přináší rozdělení:

> Zemřít
1 16.7%
2 16.7%
3 16.7%
4 16.7%
5 16.7%
6 16.7%

Funkce jednotný vezme seznam prvků a vytváří rozdělení, kde každý prvek je stejně pravděpodobně. Můžeme také použít funkce, jako jsou uniformy budovat pravděpodobnostní funkce, tzv. přechody. Zde je přechod, který vzhledem k tomu, číslo, a to buď jeden přidá, nebo ne se stejnou pravděpodobností.

succOrId x = jednotná [x, x +1]

Mohli bychom také reprezentovat tuto funkci s využitím vyber subjekt, který konstruuje rozdělení dvou prvků.

succOrId x = vybrat 0,5 x (x +1)

Představte si, že chceme vrátit kostkou, pak buď přidat nebo ne. Můžeme použít unární operátory kombinovat pravděpodobnostní operací. To může být zastoupen výstižně, nebo ve více jak verbose.

komický = die >> = succOrId

Nebo:

komický = dělat d mapD (uncurry (+)) (prod die die)
7 16.7%
6 13.9%
8 13.9%
5 11,1%
9 11,1%
4 8.3%
10 8,3%
3 5.6%
11 5,6%
2 2,8%
12 2,8%

Nebo to, co je pravděpodobnost, že se dvěma kostkami různých o jeden bod?

* Dice> (== 1)? mapD (abs uncurry (-.)) (prod die die)
27,8%

Další příklady jsou obsaženy v dokumentech uvedených níže.