28
28
;;; Author Dan Stanger 12/1/02
29
29
(defmfun $assoc (key ielist &optional default)
30
(let ((elist (margs ielist)))
31
(if (every #'(lambda (x) (= 3 (length x))) elist)
32
(let ((found (find key elist :test #'alike1 :key #'second)))
33
(if found (third found) default))
34
(MERROR "Improper form for list:~%~M" ielist))))
36
;;; This function works like the every function in lisp.
37
;;; It can take a list, or a positive number of arguments returning
38
;;; true if all its arguments are not false.
39
;;; Author Dan Stanger 12/1/02
40
(defmfun $every (&rest args)
41
(let ((n (length args)))
42
(cond ((= n 0) (merror "Every must have at least 1 argument"))
44
(let ((args (first args)))
45
(if (and ($listp args) (> ($length args) 0))
46
(notany #'not (margs args))
47
(if (and ($listp args) (= ($length args) 0)) nil args))))
48
(t (notany #'not args)))))
30
(let ((elist (margs ielist)))
31
(if (every #'(lambda (x) (= 3 (length x))) elist)
32
(let ((found (find key elist :test #'alike1 :key #'second)))
33
(if found (third found) default))
34
(merror "Improper form for list:~%~M" ielist))))
50
36
;;; (ASSOL item A-list)
55
41
;;; Meta-Synonym: (ASS #'ALIKE1 ITEM ALIST)
57
(DEFMFUN ASSOL (ITEM ALIST)
59
(IF (ALIKE1 ITEM (CAR PAIR)) (RETURN PAIR))))
43
(defmfun assol (item alist)
45
(if (alike1 item (car pair)) (return pair))))
62
(DEFMFUN ASSOLIKE (ITEM ALIST)
63
(CDR (ASSOL ITEM ALIST)))
48
(defmfun assolike (item alist)
49
(cdr (assol item alist)))
65
; Old ASSOLIKE definition:
67
; (defun assolike (e l)
69
; loop (cond ((null l) (return nil))
70
; ((alike1 e (caar l)) (return (cdar l))))
51
;; Old ASSOLIKE definition:
53
;; (defun assolike (e l)
55
;; loop (cond ((null l) (return nil))
56
;; ((alike1 e (caar l)) (return (cdar l))))
74
60
;;; (MEM #'ALIKE1 X L)
76
(DEFMFUN MEMALIKE (X L)
77
(DO ((L L (CDR L))) ((NULL L))
78
(COND ((ALIKE1 X (CAR L)) (RETURN L)))))
62
(defmfun memalike (x l)
63
(do ((l l (cdr l))) ((null l))
64
(cond ((alike1 x (car l)) (return l)))))
80
66
;;;Do we want MACROS for these on MC and on Multics?? -Jim 1/29/81
85
(EQUAL (GETCHARN X 1) #\&)))
87
(DEFMFUN MSTRING-TO-STRING (X)
88
(SUBSTRING (STRING X) 1))
90
(DEFMFUN STRING-TO-MSTRING (X)
91
(MAKE-SYMBOL (STRING-APPEND "&" X)))
71
(equal (getcharn x 1) #\&)))
73
(defmfun mstring-to-string (x)
74
(substring (string x) 1))
76
(defmfun string-to-mstring (x)
77
(make-symbol (string-append "&" x)))