[ << ] | [ < ] | [ 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.