On Sunday, November 11, 2012 9:46:54 AM UTC+1, hans wrote:
> On Saturday, November 10, 2012 4:06:30 PM UTC+1, WJ wrote:
> > hans wrote:
> > > How can I transform a "lisp tree" like
> > > (("Class: Osteichthyes")
> > > ("Class: Chondrichthyes"
> > > (("Order: Squaliformes")
> > > ("Order: Rajiformes")))
> > > ("Class: Mammalia"
> > > (("Order: Rodentia"
> > > (("Family: Sciuridae")
> > > ("Family: Muridae")
> > > ("Family: Cricetidae")))
> > > ("Order: Carnivora"
> > > (("Family: Felidae")
> > > ("Family: Canidae")
> > > ("Family: Ursidae"))))))
> > > into a "clim (or mcclim) tree" like
> > > (("Class: Osteichthyes")
> > > ("Class: Chondrichthyes"
> > > :items (("Order: Squaliformes")
> > > ("Order: Rajiformes")))
> > > ("Class: Mammalia"
> > > :items (("Order: Rodentia"
> > > :items (("Family: Sciuridae")
> > > ("Family: Muridae")
> > > ("Family: Cricetidae")))
> > > ("Order: Carnivora"
> > > :items (("Family: Felidae")
> > > ("Family: Canidae")
> > > ("Family: Ursidae"))))))
> > > thank you
> > Using pattern-matching in Racket:
> > (define tree
> > '(("Class: Osteichthyes")
> > ("Class: Chondrichthyes"
> > (("Order: Squaliformes")
> > ("Order: Rajiformes")))
> > ("Class: Mammalia"
> > (("Order: Rodentia"
> > (("Family: Sciuridae")
> > ("Family: Muridae")
> > ("Family: Cricetidae")))
> > ("Order: Carnivora"
> > (("Family: Felidae")
> > ("Family: Canidae")
> > ("Family: Ursidae")))))))
> > (define (climate tree)
> > (map (match-lambda
> > [(list (? string? x)) (list x)]
> > [(list (? string? x) more ...)
> > (list* x ':items (climate more))]
> > [x (climate x)])
> > tree))
> > (climate tree)
> > '(("Class: Osteichthyes")
> > ("Class: Chondrichthyes"
> > :items
> > (("Order: Squaliformes") ("Order: Rajiformes")))
> > ("Class: Mammalia"
> > :items
> > (("Order: Rodentia"
> > :items
> > (("Family: Sciuridae") ("Family: Muridae") ("Family: Cricetidae")))
> > ("Order: Carnivora"
> > :items
> > (("Family: Felidae") ("Family: Canidae") ("Family: Ursidae"))))))
> Is such pattern matching possible in CL too?
Yes. CL-UNIFICATION is there for you in Quicklisp (shameless plug). Alongside CL-ENUMERATION (another shameless plug) :)