diff --git a/libguile/srfi-1.c b/libguile/srfi-1.c index 6eace5f31..2fb677a7a 100644 --- a/libguile/srfi-1.c +++ b/libguile/srfi-1.c @@ -104,41 +104,6 @@ list_copy_part (SCM lst, int count, SCM *dst) #undef FUNC_NAME -SCM_DEFINE (scm_srfi1_alist_copy, "alist-copy", 1, 0, 0, - (SCM alist), - "Return a copy of @var{alist}, copying both the pairs comprising\n" - "the list and those making the associations.") -#define FUNC_NAME s_scm_srfi1_alist_copy -{ - SCM ret, *p, elem, c; - - /* ret is the list to return. p is where to append to it, initially &ret - then SCM_CDRLOC of the last pair. */ - ret = SCM_EOL; - p = &ret; - - for ( ; scm_is_pair (alist); alist = SCM_CDR (alist)) - { - elem = SCM_CAR (alist); - - /* each element of alist must be a pair */ - SCM_ASSERT_TYPE (scm_is_pair (elem), alist, SCM_ARG1, FUNC_NAME, - "association list"); - - c = scm_cons (scm_cons (SCM_CAR (elem), SCM_CDR (elem)), SCM_EOL); - *p = c; - p = SCM_CDRLOC (c); - } - - /* alist must be a proper list */ - SCM_ASSERT_TYPE (SCM_NULL_OR_NIL_P (alist), alist, SCM_ARG1, FUNC_NAME, - "association list"); - return ret; -} -#undef FUNC_NAME - - - SCM_DEFINE (scm_srfi1_append_reverse, "append-reverse", 2, 0, 0, (SCM revhead, SCM tail), "Reverse @var{rev-head}, append @var{tail} to it, and return the\n" diff --git a/libguile/srfi-1.h b/libguile/srfi-1.h index a9adcc29f..ddc8d0a27 100644 --- a/libguile/srfi-1.h +++ b/libguile/srfi-1.h @@ -24,7 +24,6 @@ #include "libguile/__scm.h" -SCM_INTERNAL SCM scm_srfi1_alist_copy (SCM alist); SCM_INTERNAL SCM scm_srfi1_append_reverse (SCM revhead, SCM tail); SCM_INTERNAL SCM scm_srfi1_append_reverse_x (SCM revhead, SCM tail); SCM_INTERNAL SCM scm_srfi1_concatenate (SCM lstlst); diff --git a/module/srfi/srfi-1.scm b/module/srfi/srfi-1.scm index 5eaf8eadb..d7ef6bb0c 100644 --- a/module/srfi/srfi-1.scm +++ b/module/srfi/srfi-1.scm @@ -664,6 +664,15 @@ CLIST1 ... CLISTN, that satisfies PRED." (define alist-cons acons) +(define (alist-copy alist) + "Return a copy of ALIST, copying both the pairs comprising the list +and those making the associations." + (let lp ((a alist) + (rl '())) + (if (null? a) + (reverse! rl) + (lp (cdr a) (alist-cons (caar a) (cdar a) rl))))) + (define* (alist-delete key alist #:optional (k= equal?)) (let lp ((a alist) (rl '())) (if (null? a)