Example Markov Logic Network from Richardson, M., & Domingos, P. (2006). Markov logic networks. Machine learning, 62(1-2), 107-136.

``````(define (implies x y) (or (not x) y))

(define samples
(mh-query 1000 100
(define people (list 'anna 'bob))
(define smokes (mem (lambda (person) (flip))))
(define cancer (mem (lambda (person) (flip))))
(define friends (mem (lambda (x y) (flip))))

(define smokes-cancer (sum (map
(lambda (x) (if (implies (smokes x) (cancer x)) 0 -1.5))
people
)))
(define friends-smoke (sum (map
(lambda (x) (sum (map
(lambda (y) (if (implies (friends x y) (eq? (smokes x) (smokes y))) 0 -1.1))
people
)))
people
)))
(define model (+ smokes-cancer friends-smoke))
(define evidence (and (smokes 'anna) (friends 'anna 'bob)))

(cancer 'bob)

(and evidence (< (uniform 0 1) (exp model)))
)
)
(hist samples)
``````

Another version of the above, slightly more idiomatic for WebChurch in that it uses `factor` statements to add the log-probability contributions locally:

``````(define (implies x y) (or (not x) y))

(define samples
(mh-query 1000 100
(define people (list 'anna 'bob))
(define smokes (mem (lambda (person) (flip))))
(define cancer (mem (lambda (person) (flip))))
(define friends (mem (lambda (x y) (flip))))

(define smokes-cancer
(map
(lambda (x) (factor (if (implies (smokes x) (cancer x)) 0 -1.5)))
people))

(define friends-smoke
(map
(lambda (x)
(map
(lambda (y)
(factor (if (implies (friends x y) (eq? (smokes x) (smokes y))) 0 -1.1)))
people))
people))

(define evidence (and (smokes 'anna) (friends 'anna 'bob)))

(cancer 'bob)

(condition evidence)
)
)
(hist samples)
``````