program. 算术性质检查的表达式与环境样本[lp-cases]

(define (expressions depth)
   (let ((atoms '(-1 0 1 x y)))
     (if (= depth 0) atoms
         (let ((smaller (expressions (- depth 1))))
           (append atoms
             (append-map
               (lambda (operation)
                 (append-map
                   (lambda (left)
                     (map (lambda (right) (list operation left right)) smaller))
                   smaller))
               '(+ *)))))))

(define environments
   '(((x -2) (y 3)) ((x 0) (y 0)) ((x 4) (y -1))))

(define cases
   (append-map
     (lambda (expression)
       (map (lambda (environment) (list expression environment)) environments))
     (expressions 2)))