[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |

### Catamorphisms

The example below illustrates the use of explicit recursion within an
`sxml-match`

form. This example implements a simple calculator for the
basic arithmetic operations, which are represented by the XML elements
`plus`

, `minus`

, `times`

, and `div`

.

(define simple-eval (lambda (x) (sxml-match x [,i (guard (integer? i)) i] [(plus ,x ,y) (+ (simple-eval x) (simple-eval y))] [(times ,x ,y) (* (simple-eval x) (simple-eval y))] [(minus ,x ,y) (- (simple-eval x) (simple-eval y))] [(div ,x ,y) (/ (simple-eval x) (simple-eval y))] [,otherwise (error "simple-eval: invalid expression" x)])))

Using the catamorphism feature of `sxml-match`

, a more concise version of
`simple-eval`

can be written. The pattern `,[x]`

recursively invokes
the pattern matcher on the value bound in this position.

(define simple-eval (lambda (x) (sxml-match x [,i (guard (integer? i)) i] [(plus ,[x] ,[y]) (+ x y)] [(times ,[x] ,[y]) (* x y)] [(minus ,[x] ,[y]) (- x y)] [(div ,[x] ,[y]) (/ x y)] [,otherwise (error "simple-eval: invalid expression" x)])))

This document was generated on *April 20, 2013* using *texi2html 5.0*.