On Jun 23, Greg Hendershott wrote: > > (define (find-elements xexpr tag-name) > ;; Given an x-expression return a list of all the elements starting > with tag-name. > (if (empty? xexpr) > '() > (let ([x (first xexpr)]) > (if (and (list? x) (not (empty? x))) > (if (and (symbol? (first x)) (symbol=? (first x) tag-name)) > (append (list x) ; found one! > (find-elements x tag-name) ; drill down > (find-elements (rest xexpr) tag-name)) ; iterate > across > (append (find-elements x tag-name) ; drill down > (find-elements (rest xexpr) tag-name))) ; iterate > across > (find-elements (rest xexpr) tag-name))))) ; iterate across
`match' is more convenient for such things: (define (find-links xexpr) (match xexpr [(list 'a _ ...) (list xexpr)] [(list xs ...) (append* (map find-links xs))] [_ '()])) -- ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: http://barzilay.org/ Maze is Life! _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users