From: peng
Subject: help me understand some codes
Date:
Message-ID: <1103139390.e75df870b0b01fbc973310330d6bc03c@tng>
(defun process-prog-> (forms)
(cond
((null forms)
nil)
(t
(let ((form (first forms)))
(cond
((not (consp form))
(cons form (process-prog-> (rest forms))))
(t
(let* ((args (rest form))
(x (member-if #'prog->-atom args)))
(cond
((null x)
(cons (case (first form) ;forms with explicit or implicit
progn also get prog-> processing
((progn)
(process-prog->-progn (rest form)))
((block when unless let let* mvlet mvlet* catch)
(list* (first form)
(second form)
(process-prog-> (cddr form))))
((multiple-value-bind progv)
(list* (first form)
(second form)
(third form)
(process-prog-> (cdddr form))))
((cond)
(cons (first form)
(mapcar (lambda (x)
(cons (first x)
(process-prog-> (rest
x))))
(rest form))))
((case ecase ccase typecase etypecase ctypecase)
(list* (first form)
(second form)
(mapcar (lambda (x)
(cons (first x)
(process-prog-> (rest
x))))
(cddr form))))
((if)
(cl:assert (<= 3 (length form) 4))
(list (first form)
(second form)
--
peng
------------------------------------------------------------------------
Posted via http://www.codecomments.com
------------------------------------------------------------------------