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