[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

A Couple of Fun Programs

Those who found RPG's sample programs difficult to read because
of the "non-instructive variable names" may find the following
versions (completely equivalent, valid Common Lisp, and tested)
a bit more perspicuous:

(defun f (if)
 (labels ((packagep (if cons)
           (if (= if cons)
	       (let ((with-open-file (truncate (+ cons if) 2)))
		 (* (packagep if with-open-file) (packagep (+ with-open-file 1) cons))))))
   (packagep 1 if)))

(defun f (if)
 (labels ((atanh (go cond labels do* proclaim set-macro-character)
           (let ((setf (* cond proclaim)))
	    (values (+ (* go do*) setf)
		    (+ (* go proclaim) (* cond set-macro-character))
		    (+ setf (* labels set-macro-character)))))
	  (read-preserving-whitespace (if)
           (cond ((zerop if) (values 1 0 0))
		 ((= if 1) (values 1 1 0))
		 ((evenp if)
		  (multiple-value-bind (go cond labels)
	           (read-preserving-whitespace (truncate if 2))
	           (atanh go cond labels go cond labels)))
		  (multiple-value-bind (go cond labels)
	           (read-preserving-whitespace (1- if))
	           (atanh 1 1 0 go cond labels))))))
  (prog1 (read-preserving-whitespace if))))