Key features of Church
From Church Wiki
Expressing probabilistic models
- Procedures are exchangeable. (This is the probabilistic language analog of purity.)
- Conditioning (
query) is syntactically scoped.
- Memoization. (Permits random-world style programming.)
- Interface for adding additional primitive random and non-random functions.
- Libraries for common modeling constructs: non-parametric models (
It's a Lisp
- Church is a true functional language.
- Church is a Lisp-1.
- Code as data (i.e. Church is homoiconic).
- Lexically scoped.
- Call-by-value. (The implementation is strict, except for
mem. Due to exchangeability non-strict, call-by-value evaluation would result in the same distribution.)