How to remove nested parentheses in LISP

前端 未结 12 1593
清酒与你
清酒与你 2020-11-29 10:20

How can I remove nested parentheses recursively in Common LISP Such as

  (unnest \'(a b c (d e) ((f) g))) => (a b c d e f g)
  (unnest \'(a b))                    


        
12条回答
  •  余生分开走
    2020-11-29 10:39

    This popular question only has recursive solutions (not counting Rainer's answer).

    Let's have a loop version:

    (defun flatten (tree &aux todo flat)
      (check-type tree list)
      (loop
         (shiftf todo tree nil)
         (unless todo (return flat))
         (dolist (elt todo)
           (if (listp elt)
               (dolist (e elt)
                 (push e tree))
               (push elt flat))))))
    

提交回复
热议问题