[slime-cvs] CVS update: slime/ChangeLog slime/swank.lisp

Edi Weitz eweitz at common-lisp.net
Tue Aug 9 13:56:57 UTC 2005


Update of /project/slime/cvsroot/slime
In directory common-lisp.net:/tmp/cvs-serv32297

Modified Files:
	ChangeLog swank.lisp 
Log Message:
New version of SWANK::TRANSPOSE-LISTS

Date: Tue Aug  9 15:56:55 2005
Author: eweitz

Index: slime/ChangeLog
diff -u slime/ChangeLog:1.735 slime/ChangeLog:1.736
--- slime/ChangeLog:1.735	Mon Aug  8 18:32:02 2005
+++ slime/ChangeLog	Tue Aug  9 15:56:54 2005
@@ -1,3 +1,8 @@
+2005-08-09  Edi Weitz  <edi at agharta.de>
+
+	* swank.lisp (transpose-lists): Reimplemented without APPLY so we
+	don't have problems with CALL-ARGUMENTS-LIMIT.
+
 2005-08-08  Matthias Koeppe  <mkoeppe at mail.math.uni-magdeburg.de>
 
 	* slime.el (undo-in-progress): Define for XEmacs compatibility.


Index: slime/swank.lisp
diff -u slime/swank.lisp:1.319 slime/swank.lisp:1.320
--- slime/swank.lisp:1.319	Sat Aug  6 16:50:20 2005
+++ slime/swank.lisp	Tue Aug  9 15:56:54 2005
@@ -2566,8 +2566,17 @@
 For example:
 \(transpose-lists '((ONE TWO THREE) (1 2)))
   => ((ONE 1) (TWO 2))"
-  ;; A cute function from PAIP p.574
-  (if lists (apply #'mapcar #'list lists)))
+  (catch 'done
+    (loop with result
+          with collectors = (loop for list in lists
+                                  collect (let ((list list))
+                                            (lambda ()
+                                              (cond ((null list)
+                                                     (throw 'done result))
+                                                    (t (pop list))))))
+          collect (loop for collector in collectors
+                        collect (funcall collector)) into temp-result
+          do (setq result temp-result))))
 
 
 ;;;;; Completion Tests




More information about the slime-cvs mailing list