[SBCL] CL-USER> (ql:quickload '(plump drakma)) To load "plump": Load 1 ASDF system: plump ; Loading "plump" To load "drakma": Load 1 ASDF system: drakma ; Loading "drakma" .... (PLUMP DRAKMA) [SBCL] CL-USER> (defun tree-search (node predicate children) (let ((child-results (loop :for child :across (funcall children node) :append (tree-search child predicate children)))) (if (funcall predicate node) (cons node child-results) child-results))) TREE-SEARCH [SBCL] CL-USER> (defun children (node) (if (plump:has-child-nodes node) (plump:children node) #())) CHILDREN [SBCL] CL-USER> (defun commentp (node) (typep node 'plump:comment)) COMMENTP [SBCL] CL-USER> (loop :for comment :in (tree-search (plump:parse (drakma:http-request "http://placekitten.com")) #'commentp #'children) :do (print (plump:serialize comment nil))) "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" NIL [SBCL] CL-USER>