+
+(defun float-to-string (x)
+ #+jscl (float-to-string x)
+ #-jscl (format nil "~f" x))
+
+(defun satisfies-test-p (x y &key key (test #'eql) testp (test-not #'eql) test-not-p)
+ (when (and testp test-not-p)
+ (error "Both test and test-not are set"))
+ (let ((key-val (if key (funcall key y) y))
+ (fn (if test-not-p (complement test-not) test)))
+ (funcall fn x key-val)))
+
+
+(defun interleave (list element &optional after-last-p)
+ (unless (null list)
+ (with-collect
+ (collect (car list))
+ (dolist (x (cdr list))
+ (collect element)
+ (collect x))
+ (when after-last-p
+ (collect element)))))