Have you ever wanted to use Assoc to select an item out of a list, but the search term you wanted to use wasn't the car of the elements of the list? Enter AssocOn. This will let you do an "assoc-like" search on any element of the sub-lists. Take a look at the examples below.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Routine: AssocON
;;; Purpose: Similar to Assoc, but uses a user specified function to select
;;; the item in the list on which to search instead of
;;; searching on the car of the list.
;;; Arguments: SearchTerm, the item for which we are searching.
;;; Lst, the list of lists through which we are searching.
;;; func, the function we are using to specify the item in the
;;; sub-list.
;;; Returns: the sub-list with the first match. ;;;
;;;=============================================================================
;;; Examples
;;; Given: (setq mylist '((1 2 3 4 5) (7 6 5 4 3 2 1) (12 13 14 15)))
;;; (assocon 2 mylist 'cadr)
;;; will return
;;; (1 2 3 4 5)
;;;
;;; and
;;;
;;; (assocon "2" mylist
;;; (function (lambda(x)(itoa (cadr x))))
;;; )
;;; will return
;;; (1 2 3 4 5)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun AssocOn (SearchTerm Lst func /)
(car
(vl-member-if
(function
(lambda (pair) (equal SearchTerm (apply func (list pair))))
)
lst
)
)
)
I hate doing things I can make my computer do for me. My adventures in customizing and automating computers. Primarily with AutoCAD and Microsoft Office.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment