How Uncertain<T> works: Evidence-based programming
mainInstead of treating data as exact values, Uncertain<T> treats data as probability distributions. This allows you to make decisions based on confidence levels rather than raw values.
Key workflow:
- Wrap data: Convert exact values or sensor readings into
Uncertain<T>instances. - Build computation graphs: Use arithmetic, comparison, and logical operators to create complex expressions. These operations are lazy and do not perform sampling immediately.
- Evaluate evidence: Use methods like
.probability(exceeds:)or.evaluateHypothesis(...)to trigger sampling and make decisions based on statistical confidence.
import Uncertain
import CoreLocation
// 1. Wrap data
let uncertainLocation = Uncertain<CLLocation>.from(location)
let uncertainSpeed = uncertainLocation.speed
// 2. Build computation graph (comparison returns Uncertain<Bool>)
let isSpeeding = uncertainSpeed > speedLimit
// 3. Evaluate evidence with confidence
if isSpeeding.probability(exceeds: 0.95) {
issueCitation()
}