From f33d23bca185e2c9d2431d3bca5ab9156b7225b7 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Sat, 7 Apr 2018 12:18:50 +0200 Subject: [PATCH] core: Add member. * src/lib.c (member): New function. * module/mes/scm.mes (member): Remove. --- module/mes/scm.mes | 5 ----- src/lib.c | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/module/mes/scm.mes b/module/mes/scm.mes index 805b0318..32fc13f6 100644 --- a/module/mes/scm.mes +++ b/module/mes/scm.mes @@ -126,11 +126,6 @@ (define memv memq) -(define (member x lst) - (if (null? lst) #f - (if (equal? x (car lst)) lst - (member x (cdr lst))))) - ;;; Lists (define (make-list n . x) diff --git a/src/lib.c b/src/lib.c index 8b46898e..9fb74900 100644 --- a/src/lib.c +++ b/src/lib.c @@ -312,3 +312,21 @@ equal2_p (SCM a, SCM b) } return eq_p (a, b); } + +SCM +member (SCM x, SCM a) +{ + switch (TYPE (x)) + { + case TCHAR: + case TNUMBER: + case TKEYWORD: + case TSYMBOL: + case TSPECIAL: + return memq (x, a); + default: + while (a != cell_nil && equal2_p (x, CAR (a)) != cell_t) + a = CDR (a); + } + return a != cell_nil ? a : cell_f; +}