https://github.com/fukamachi/assoc-utils.git
git clone 'https://github.com/fukamachi/assoc-utils.git'
(ql:quickload :assoc-utils)
Utilities for manipulating association lists.
(defvar *person*
'(("name" . "Eitaro") ("email" . "e.arrows@gmail.com")))
(aget *person* "name")
;=> "Eitaro"
(aget *person* "address")
;=> NIL
(aget *person* "address" "Tokyo, Japan")
;=> "Tokyo, Japan"
(setf (aget *person* "name") "Eitaro Fukamachi")
*person*
;=> (("name" . "Eitaro") ("email" . "e.arrows@gmail.com"))
(defvar *person*
'(("name" . "Eitaro") ("email" . "e.arrows@gmail.com")))
(remove-from-alist *person* "name")
;=> (("email" . "e.arrows@gmail.com"))
;; Destructive version
(delete-from-alist *person* "name")
;=> (("email" . "e.arrows@gmail.com"))
(defvar *person*
'(("name" . "Eitaro") ("email" . "e.arrows@gmail.com")))
(alist-plist *person*)
;=> (:NAME "Eitaro" :EMAIL "e.arrows@gmail.com")
(plist-alist '(:name "Eitaro" :email "e.arrows@gmail.com"))
;=> (("name" . "Eitaro") ("email" . "e.arrows@gmail.com"))
(defvar *person*
'(("name" . "Eitaro") ("email" . "e.arrows@gmail.com")))
(alist-keys *person*)
;=> ("name" "email")
(alist-values *person*)
;=> ("Eitaro" "e.arrows@gmail.com")
(alistp '(("name" . "Eitaro") ("email" . "e.arrows@gmail.com")))
;=> T
(alistp 1)
;=> NIL
(alistp nil)
;=> T
;; Type: alist is also available
(typep '(("name" . "Eitaro") ("email" . "e.arrows@gmail.com")) 'alist)
;=> T
(alist= '(("name" . "Eitaro") ("email" . "e.arrows@gmail.com"))
'(("email" . "e.arrows@gmail.com") ("name" . "Eitaro")))
;=> T
(ql:quickload :assoc-utils)
Assoc-Utils is free and unencumbered software released into the public domain.