Mercurial > hg > xemacs-beta
diff lisp/ilisp/ilisp-el.el @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | b82b59fe008d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/ilisp/ilisp-el.el Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,75 @@ +;;; -*- Mode: Emacs-Lisp -*- + +;;; ilisp-el.el -- + +;;; This file is part of ILISP. +;;; Version: 5.7 +;;; +;;; Copyright (C) 1990, 1991, 1992, 1993 Chris McConnell +;;; 1993, 1994 Ivan Vasquez +;;; 1994, 1995 Marco Antoniotti and Rick Busdiecker +;;; +;;; Other authors' names for which this Copyright notice also holds +;;; may appear later in this file. +;;; +;;; Send mail to 'ilisp-request@lehman.com' to be included in the +;;; ILISP mailing list. 'ilisp@lehman.com' is the general ILISP +;;; mailing list were bugs and improvements are discussed. +;;; +;;; ILISP is freely redistributable under the terms found in the file +;;; COPYING. + + +;;; +;;; ILISP extensions to emacs lisp +;;; + + + +;;;%Utils +;;; This should be in emacs, but it isn't. +(defun lisp-mem (item list &optional elt=) + "Test to see if ITEM is equal to an item in LIST. +Option comparison function ELT= defaults to equal." + (let ((elt= (or elt= (function equal))) + (done nil)) + (while (and list (not done)) + (if (funcall elt= item (car list)) + (setq done list) + (setq list (cdr list)))) + done)) + + + +;;;%%Misc +(defun lisp-memk (item list key) + "Test to see if ITEM is in LIST using KEY on each item in LIST +before comparing it to ITEM." + (lisp-mem item list (function (lambda (x y) + (equal x (funcall key y)))))) + +;;; This should be in emacs, but it isn't. +(defun lisp-del (item list &optional test) + "Delete ITEM from LIST using TEST comparison and return the result. +Default test is equal." + (let ((test (or test (function equal))) + (element list) + (prev nil) + (done nil)) + (while (and element (not done)) + (if (funcall test item (car element)) + (progn + (setq done t) + (if prev + (rplacd prev (cdr element)) + (setq list (cdr list)))) + (setq prev element + element (cdr element)))) + list)) + +;;; +(defun lisp-last (list) + "Return the last element of LIST." + (while (cdr list) + (setq list (cdr list))) + (car list))