X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Futils.lisp;h=6ab351d1f21fc9a780a442638e685eb9ee727011;hb=e1301bcded5eed2d9259d7688edf03892468fe2b;hp=d586cddf69dd01913e077e8d824d242e5fa1a2c0;hpb=cae73e8875a24258961b29e84d48d9794cb5be03;p=jscl.git diff --git a/src/utils.lisp b/src/utils.lisp index d586cdd..6ab351d 100644 --- a/src/utils.lisp +++ b/src/utils.lisp @@ -16,14 +16,13 @@ ;; You should have received a copy of the GNU General Public License ;; along with JSCL. If not, see . -(defvar *newline* " -") +(/debug "loading utils.lisp!") (defmacro concatf (variable &body form) `(setq ,variable (concat ,variable (progn ,@form)))) ;;; This couple of helper functions will be defined in both Common -;;; Lisp and in Ecmalisp. +;;; Lisp and in JSCL (defun ensure-list (x) (if (listp x) x @@ -83,4 +82,22 @@ (defun float-to-string (x) #+jscl (float-to-string x) - #+common-lisp (format nil "~f" 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)))))