manpagez: man pages & more
info guile
Home | html | info | man
[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Named-Catamorphisms

It is also possible to explicitly name the operator in the “cata” position. Where ,[id*] recurs to the top of the current sxml-match, ,[cata -> id*] recurs to cata. cata must evaluate to a procedure which takes one argument, and returns as many values as there are identifiers following ->.

Named catamorphism patterns allow processing to be split into multiple, mutually recursive procedures. This is illustrated in the example below: a transformation that formats a “TV Guide” into HTML.

(define (tv-guide->html g)
  (define (cast-list cl)
    (sxml-match cl
      [(CastList (CastMember (Character (Name ,ch)) (Actor (Name ,a))) ...)
       `(div (ul (li ,ch ": " ,a) ...))]))
  (define (prog p)
    (sxml-match p
      [(Program (Start ,start-time) (Duration ,dur) (Series ,series-title)
                (Description ,desc ...))
       `(div (p ,start-time
                (br) ,series-title
                (br) ,desc ...))]
      [(Program (Start ,start-time) (Duration ,dur) (Series ,series-title)
                (Description ,desc ...)
                ,[cast-list -> cl])
       `(div (p ,start-time
                (br) ,series-title
                (br) ,desc ...)
             ,cl)]))
  (sxml-match g
    [(TVGuide (@ (start ,start-date)
                 (end ,end-date))
              (Channel (Name ,nm) ,[prog -> p] ...) ...)
     `(html (head (title "TV Guide"))
            (body (h1 "TV Guide")
                  (div (h2 ,nm) ,p ...) ...))]))

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

© manpagez.com 2000-2019
Individual documents may contain additional copyright information.