X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=alist.el;h=d8d8d18cfe994b2b752cfea8855cb2b687b54dab;hb=cc97e1054659c154d67b72fa9a19b0a511253377;hp=4ac31695e92ceb871d866800b2346eadfc43446b;hpb=301071b17067645ac85c896ee1ba29df9637d77c;p=elisp%2Fapel.git diff --git a/alist.el b/alist.el index 4ac3169..d8d8d18 100644 --- a/alist.el +++ b/alist.el @@ -1,11 +1,11 @@ -;;; alist.el --- utility functions about association-list +;;; alist.el --- utility functions for association list ;; Copyright (C) 1993,1994,1995,1996,1998,2000 Free Software Foundation, Inc. ;; Author: MORIOKA Tomohiko ;; Keywords: alist -;; This file is part of APEL (A Portable Emacs Library). +;; This file is part of GNU Emacs. ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as @@ -19,82 +19,62 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Code: ;;;###autoload -(defun put-alist (item value alist) - "Modify ALIST to set VALUE to ITEM. -If there is a pair whose car is ITEM, replace its cdr by VALUE. -If there is not such pair, create new pair (ITEM . VALUE) and -return new alist whose car is the new pair and cdr is ALIST. -\[tomo's ELIS like function]" - (let ((pair (assoc item alist))) - (if pair +(defun put-alist (key value alist) + "Set cdr of an element (KEY . ...) in ALIST to VALUE and return ALIST. +If there is no such element, create a new pair (KEY . VALUE) and +return a new alist whose car is the new pair and cdr is ALIST." + (let ((elm (assoc key alist))) + (if elm (progn - (setcdr pair value) + (setcdr elm value) alist) - (cons (cons item value) alist) - ))) + (cons (cons key value) alist)))) ;;;###autoload -(defun del-alist (item alist) - "If there is a pair whose key is ITEM, delete it from ALIST. -\[tomo's ELIS emulating function]" - (if (equal item (car (car alist))) - (cdr alist) - (let ((pr alist) - (r (cdr alist)) - ) - (catch 'tag - (while (not (null r)) - (if (equal item (car (car r))) - (progn - (rplacd pr (cdr r)) - (throw 'tag alist))) - (setq pr r) - (setq r (cdr r)) - ) - alist)))) +(defun del-alist (key alist) + "Delete an element whose car equals KEY from ALIST. +Return the modified ALIST." + (let ((pair (assoc key alist))) + (if pair + (delq pair alist) + alist))) ;;;###autoload -(defun set-alist (symbol item value) - "Modify a alist indicated by SYMBOL to set VALUE to ITEM." +(defun set-alist (symbol key value) + "Set cdr of an element (KEY . ...) in the alist bound to SYMBOL to VALUE." (or (boundp symbol) - (set symbol nil) - ) - (set symbol (put-alist item value (symbol-value symbol))) - ) + (set symbol nil)) + (set symbol (put-alist key value (symbol-value symbol)))) ;;;###autoload -(defun remove-alist (symbol item) - "Remove ITEM from the alist indicated by SYMBOL." +(defun remove-alist (symbol key) + "Delete an element whose car equals KEY from the alist bound to SYMBOL." (and (boundp symbol) - (set symbol (del-alist item (symbol-value symbol))) - )) + (set symbol (del-alist key (symbol-value symbol))))) ;;;###autoload (defun modify-alist (modifier default) - "Modify alist DEFAULT into alist MODIFIER." + "Store elements in the alist MODIFIER in the alist DEFAULT. +Return the modified alist." (mapcar (function (lambda (as) - (setq default (put-alist (car as)(cdr as) default)) - )) + (setq default (put-alist (car as)(cdr as) default)))) modifier) default) ;;;###autoload -(defun set-modified-alist (sym modifier) - "Modify a value of a symbol SYM into alist MODIFIER. -The symbol SYM should be alist. If it is not bound, -its value regard as nil." - (if (not (boundp sym)) - (set sym nil) - ) - (set sym (modify-alist modifier (eval sym))) - ) +(defun set-modified-alist (symbol modifier) + "Store elements in the alist MODIFIER in an alist bound to SYMBOL. +If SYMBOL is not bound, set it to nil at first." + (if (not (boundp symbol)) + (set symbol nil)) + (set symbol (modify-alist modifier (eval symbol)))) ;;; @ association-vector-list @@ -102,13 +82,14 @@ its value regard as nil." ;;;###autoload (defun vassoc (key avlist) - "Search AVLIST for a vector whose first element is equal to KEY. + "Search AVLIST for an element whose first element equals KEY. +AVLIST is a list of vectors. See also `assoc'." - (let (v) - (while (and (setq v (car avlist)) - (not (equal key (aref v 0)))) - (setq avlist (cdr avlist))) - v)) + (while (and avlist + (not (equal key (aref (car avlist) 0)))) + (setq avlist (cdr avlist))) + (and avlist + (car avlist))) ;;; @ end