Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

lisp tree to clim tree

155 views
Skip to first unread message

hans

unread,
Nov 10, 2012, 4:43:11 AM11/10/12
to
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

WJ

unread,
Nov 10, 2012, 10:06:11 AM11/10/12
to
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")

Pascal J. Bourguignon

unread,
Nov 10, 2012, 10:56:18 AM11/10/12
to
Read:

https://groups.google.com/forum/?fromgroups=#!msg/comp.lang.lisp/Nno1qbWeP2M/DemL4JflZgwJ


(defun tree-to-clim (tree)
(if (second tree)
(list (first tree)
:items (mapcar (function tree-to-clim)
(second tree)))
tree))

(caddr (tree-to-clim (list "Thing: IamTooLazyToUseGoogle"
'(("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")))))))))
-->
(("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"))))))

--
__Pascal Bourguignon__
http://www.informatimago.com

hans

unread,
Nov 11, 2012, 3:46:53 AM11/11/12
to
Is such pattern matching possible in CL too?

Marco Antoniotti

unread,
Nov 11, 2012, 10:22:18 AM11/11/12
to
Yes. CL-UNIFICATION is there for you in Quicklisp (shameless plug). Alongside CL-ENUMERATION (another shameless plug) :)

Cheers
--
MA

Pascal J. Bourguignon

unread,
Nov 11, 2012, 11:38:36 AM11/11/12
to
hans <schatze...@gmail.com> writes:

> Is such pattern matching possible in CL too?

Yes, but totally overkill for this problem.
0 new messages