This models is a neural network that learns the XOR function. The model is based on the Anglican implementation of a neural net.
;; Define expected inputs and outputs as lists
(define inputs  (list (list -1 -1) (list -1  1) (list  1 -1) (list  1  1)))
(define outputs (list           0            1            1            0))
;; Helper functions for accessing expected inputs / outputs
(define (I i l j) (list-ref (list-ref inputs i) j))
(define (O i)     (list-ref outputs i))
;; Define number of layers (l-max + 1)
(define l-max 3)
(define samples
  (mh-query 
   1000
   10
   ;; Define number of nodes in each layer (n-max + 1)
   (define n-max
     (mem
      (lambda (l)
        (- (cond ((= l 0) 2)
                 ((= l 1) 4)
                 ((= l 2) 2)
                 ((= l 3) 1)) 1))))
   ;; Define weights dynamically as required
   ;; l = layer, n = node id; j = input node id in layer l-1
   (define w
     (mem
      (lambda (l n j) (gaussian 0 0.5))))
   ;; Define activation function
   (define (activate v)
     (if (<= v 0.5) -1 1))
   ;; Evaluate a single weighted input
   ;; f = function to evaluate to get input value, i = input training pattern id
   (define (get-input f i l n j)
     (* (f i l j) (w l n j)))
   ;; Sum all weighted inputs to a node
   (define (sum-inputs f i l n j)
     (if (= j 0)
         (get-input f i l n j)
         (+ (sum-inputs f i l n (- j 1)) (get-input f i l n j))))
   ;; Evaluate node activation
   (define N
     (mem
      (lambda (i l n)
        (activate
         (if (= l 1)
             (sum-inputs I i (- l 1) n (n-max 0))
             (sum-inputs N i (- l 1) n (n-max (- l 1))))))))
   ;; Compute output value based on layer 2 nodes
   (define p-O
     (mem
      (lambda (i)
        (if (>= (N i l-max (n-max l-max)) 0) 1 0))))
   ;; Predict response to the four input values
   (map p-O (list 0 1 2 3))
   ;; Train the network using our training data
   (and (= (gaussian (p-O 0) 0.1 (O 0)) (O 0))
        (= (gaussian (p-O 1) 0.1 (O 1)) (O 1))
        (= (gaussian (p-O 2) 0.1 (O 2)) (O 2))
        (= (gaussian (p-O 3) 0.1 (O 3)) (O 3)))))
(hist (map first samples) "Input -1, -1")
(hist (map second samples) "Input -1, 1")
(hist (map third samples) "Input 1, -1")
(hist (map fourth samples) "Input 1, 1")
References: