X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Futils.lisp;h=d586cddf69dd01913e077e8d824d242e5fa1a2c0;hb=68cd2db6542fa3442d46b0331ecf8be8f86c09c2;hp=f6d812021cea3261fb6010a55c20c6c2e02a1d34;hpb=26af6f56fc615a008c3f433265ccecbfce815a61;p=jscl.git diff --git a/src/utils.lisp b/src/utils.lisp index f6d8120..d586cdd 100644 --- a/src/utils.lisp +++ b/src/utils.lisp @@ -29,18 +29,18 @@ x (list x))) -(defun !reduce (func list &key initial-value) - (if (null list) - initial-value - (!reduce func - (cdr list) - :initial-value (funcall func initial-value (car list))))) +(defun !reduce (func list initial-value) + (let ((result initial-value)) + (dolist (element list result) + (setq result (funcall func result element))))) ;;; Concatenate a list of strings, with a separator (defun join (list &optional (separator "")) - (!reduce (lambda (s o) (concat s separator o)) - (cdr list) - :initial-value (car list))) + (if (null list) + "" + (!reduce (lambda (s o) (concat s separator o)) + (cdr list) + (car list)))) (defun join-trailing (list &optional (separator "")) (if (null list)