From 88fc9a979f880e37b3ecbcdbdfa40a759550bec1 Mon Sep 17 00:00:00 2001 From: Asumu Takikawa Date: Tue, 11 Jun 2013 12:01:15 -0400 Subject: [PATCH] Fix build. Forgot to add this file in c305dba. Apologies to any future git bisect-ers --- collects/racket/private/member.rkt | 57 ++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 collects/racket/private/member.rkt diff --git a/collects/racket/private/member.rkt b/collects/racket/private/member.rkt new file mode 100644 index 0000000000..24a2469b07 --- /dev/null +++ b/collects/racket/private/member.rkt @@ -0,0 +1,57 @@ +(module member '#%kernel + (#%require "cond.rkt" "qq-and-or.rkt" + (for-syntax '#%kernel "qq-and-or.rkt")) + (#%provide memq memv member) + + ;; helper for memq/v/ber error cases + (define-values (bad-list) + (λ (who orig-l) + (raise-mismatch-error who "not a proper list: " orig-l))) + + (define-values (memq memv member) + (let-values () + ;; Create the mem functions + (define-syntaxes (mk mk-member) + (values + (λ (stx) + (define-values (forms) (syntax-e stx)) + (define-values (id eq?) + (values (syntax-e (cadr forms)) + (syntax-e (caddr forms)))) + (datum->syntax + stx + `(let-values ([(,id) + (lambda (v orig-l) + (let loop ([ls orig-l]) + (cond + [(null? ls) #f] + [(not (pair? ls)) + (bad-list ',id orig-l)] + [(,eq? v (car ls)) ls] + [else (loop (cdr ls))])))]) + ,id))) + ;; Create the `member` function that takes an extra argument + ;; Uses `mk` to construct the body + (λ (stx) + (define-values (forms) (syntax-e stx)) + (define-values (id) (syntax-e (cadr forms))) + (datum->syntax + stx + `(let* ([default (mk member equal?)] + [,id (case-lambda + ([v orig-l] (default v orig-l)) + ([v orig-l eq?] + (if (and (procedure? eq?) + (procedure-arity-includes? eq? 2)) + (void) + (raise-argument-error + 'member + "(procedure-arity-includes/c 2)" + eq?)) + ((mk member eq?) v orig-l)))]) + ,id))))) + (values (mk memq eq?) + (mk memv eqv?) + ;; Note that this uses `mk-member` + (mk-member member))))) +