X-Git-Url: http://git.chise.org/gitweb/?p=elisp%2Fapel.git;a=blobdiff_plain;f=alist.el;h=d8d8d18cfe994b2b752cfea8855cb2b687b54dab;hp=288f412ea1391b6ddc35310e4fc651f43aadaa2f;hb=8fea4843a926e356bb5e6fb7850d1a05bde1f0ca;hpb=116d684bcd5054207e89a95cd5d9b5e67faa8e73 diff --git a/alist.el b/alist.el index 288f412..d8d8d18 100644 --- a/alist.el +++ b/alist.el @@ -1,13 +1,11 @@ -;;; alist.el --- utility functions about assoc-list +;;; alist.el --- utility functions for association list -;; Copyright (C) 1993,1994,1995,1996 Free Software Foundation, Inc. +;; Copyright (C) 1993,1994,1995,1996,1998,2000 Free Software Foundation, Inc. -;; Author: MORIOKA Tomohiko -;; Version: -;; $Id: alist.el,v 0.0 1997-02-28 02:18:23 tmorioka Exp $ +;; Author: MORIOKA Tomohiko ;; Keywords: alist -;; This file is part of SEMI (SEMI is Emacs MIME Interfaces). +;; 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 @@ -21,81 +19,83 @@ ;; 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: -(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 +;;;###autoload +(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) - ))) - -(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 set-alist (symbol item value) - "Modify a alist indicated by SYMBOL to set VALUE to ITEM." + (cons (cons key value) alist)))) + +;;;###autoload +(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 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)))) -(defun remove-alist (symbol item) - "Remove ITEM from the alist indicated by SYMBOL." +;;;###autoload +(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) -(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))) - ) +;;;###autoload +(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 +;;; + +;;;###autoload +(defun vassoc (key avlist) + "Search AVLIST for an element whose first element equals KEY. +AVLIST is a list of vectors. +See also `assoc'." + (while (and avlist + (not (equal key (aref (car avlist) 0)))) + (setq avlist (cdr avlist))) + (and avlist + (car avlist))) ;;; @ end ;;; -(provide 'alist) +(require 'product) +(product-provide (provide 'alist) (require 'apel-ver)) ;;; alist.el ends here