123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- ;;; assoc/member
- ;;; Copyright (C) 2023, 2024 Igalia, S.L.
- ;;;
- ;;; Licensed under the Apache License, Version 2.0 (the "License");
- ;;; you may not use this file except in compliance with the License.
- ;;; You may obtain a copy of the License at
- ;;;
- ;;; http://www.apache.org/licenses/LICENSE-2.0
- ;;;
- ;;; Unless required by applicable law or agreed to in writing, software
- ;;; distributed under the License is distributed on an "AS IS" BASIS,
- ;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ;;; See the License for the specific language governing permissions and
- ;;; limitations under the License.
- ;;; Commentary:
- ;;;
- ;;; assoc, member, and friends.
- ;;;
- ;;; Code:
- (library (hoot assoc)
- (export assq assv assoc
- memq memv member)
- (import (hoot primitives)
- (hoot eq)
- (hoot equal)
- (hoot lists)
- (hoot not)
- (hoot pairs))
- (define-syntax-rule (define-member+assoc member assoc compare optarg ...)
- (begin
- (define* (member v l optarg ...)
- (let lp ((l l))
- (cond
- ((null? l) #f)
- ((compare v (car l)) l)
- (else (lp (cdr l))))))
- (define* (assoc v l optarg ...)
- (let lp ((l l))
- (and (not (null? l))
- (let ((head (car l)))
- (if (compare v (car head))
- head
- (lp (cdr l)))))))))
- (define-member+assoc memq assq eq?)
- (define-member+assoc memv assv eqv?)
- (define-member+assoc member assoc compare #:optional (compare equal?)))
|