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
------------------------------------------------------------------------