core: Add member.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sat, 7 Apr 2018 10:18:50 +0000 (12:18 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sat, 7 Apr 2018 10:18:50 +0000 (12:18 +0200)
* src/lib.c (member): New function.
* module/mes/scm.mes (member): Remove.

module/mes/scm.mes
src/lib.c

index 805b031838c34f73b611588988eedd4ed5815d2b..32fc13f617919063ff1b3494064aa357d41fce1a 100644 (file)
 
 (define memv memq)
 
-(define (member x lst)
-  (if (null? lst) #f
-      (if (equal? x (car lst)) lst
-          (member x (cdr lst)))))
-
 \f
 ;;; Lists
 (define (make-list n . x)
index 8b46898edeb5408f977c4790fdcb90749ed81c79..9fb749005026c7ab529cf10f24b433adf8070492 100644 (file)
--- 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;
+}