No description
- Gleam 100%
| examples | Extract examples | |
| src | Write docs | |
| test | Add test | |
| .gitignore | Initial commit | |
| gleam.toml | Add info for publshing | |
| manifest.toml | Initial commit | |
| README.md | Link to blog article | |
tinypp
tinypp is a tiny Gleam package to do probabilistic programming (hence the
name).
It is inspired by the probabilistic programming language
Church
after reading this fun paper.
It allows you to program probability distributions with discrete support, making
heavy use of Gleam's use-syntax.
The main functions are sample, condition and query:
use x <- sample(distribution): State thatxis supposed to followdistribution.use <- condition(predicate): State thatpredicateshould hold.query(quantity): State that you are interested in the distribution ofquantity.
See the example below on how put these together. Read the blog article for some behind the scenes details.
gleam add tinypp
importgleam/floatimportgleam/intimportgleam/ioimporttinypp.{pmf,normalize,sample,condition,query}importtinypp/distribution.{uniform}pubfnmain()->Nil{// What is the probability that a die shows a value greater than three if we
// know that the value is even?
letdistribution_greater_three={letdie=uniform([1,2,3,4,5,6])usevalue<-sample(die)use<-condition(int.is_even(value))query(value>3)}letp_greater_three=pmf(normalize(distribution_greater_three),True)io.println("P(value > 3 | value is even) = "<>float.to_string(p_greater_three))}In the examples folder, you can find more elaborate examples, including Bayesian linear regression.
Development
gleam test # Run the tests