anchor.diff:        (get-properties plist (list property))
       (when tail
         (cons value (get-all (cddr tail) property)))))
  +
  +
  +(defun delete-collect-if (predicate seq)
  +  (let ((head (cons nil seq)))
  +    (values
  +     (loop
  +      for tmp on head
  +      while (cdr tmp)
  +      when (funcall predicate (second tmp))
  +      collect (let ((elm (second tmp)))
  +		(setf (cdr tmp) (cddr tmp))
  +		elm))
  +     (cdr head))))
  
positive.code: ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  
  ;; $Id: utils.lisp,v 1.1 2006-03-29 09:51:55 espen Exp $
  
  (defpackage #:clg-utils
    (:use #:common-lisp)
    (:export #:read-lines #:mklist #:namep #:funcallable #:return-if #:when-bind
  	   #:visible-char-p #:whitespace-p #:split-string-if #:split-string
  	   #:concatenate-strings #:string-prefix-p #:get-all))
  	   
  (in-package #:clg-utils)
  
  
negative.code: 	(cons 
  	 (subseq string from (or to end))
  	 (when to
  	   (split-string string :delimiter predicate :start to :end end)))))))
  
  (defun concatenate-strings (strings &optional delimiter)
    (if (not (rest strings))
  