From: Kevin Ryde Date: Sun, 3 Apr 2005 22:41:15 +0000 (+0000) Subject: (scm_srfi1_concatenate, scm_srfi1_concatenate_x): Add code X-Git-Url: http://git.hcoop.net/bpt/guile.git/commitdiff_plain/c66c6d535d3e07ff2118614c7e9d6ce7d651b622?hp=dc7b50ed09164705329eb02cb0fa5e14d9612985 (scm_srfi1_concatenate, scm_srfi1_concatenate_x): Add code to check argument is a list, scm_append and scm_append_x don't do that on their "rest" list (in a normal build). --- diff --git a/srfi/srfi-1.c b/srfi/srfi-1.c index 74df5a96e..f404f7815 100644 --- a/srfi/srfi-1.c +++ b/srfi/srfi-1.c @@ -97,12 +97,39 @@ SCM_DEFINE (scm_srfi1_alist_copy, "alist-copy", 1, 0, 0, #undef FUNC_NAME -/* scm_append and scm_append_x don't modify their list argument (only the - lists within that list in the case of scm_append_x), hence making them - suitable for direct use for concatentate. */ +SCM_DEFINE (scm_srfi1_concatenate, "concatenate", 1, 0, 0, + (SCM lstlst), + "Construct a list by appending all lists in @var{lstlst}.\n" + "\n" + "@code{concatenate} is the same as @code{(apply append\n" + "@var{lstlst})}. It exists because some Scheme implementations\n" + "have a limit on the number of arguments a function takes, which\n" + "the @code{apply} might exceed. In Guile there is no such\n" + "limit.") +#define FUNC_NAME s_scm_srfi1_concatenate +{ + SCM_VALIDATE_LIST (SCM_ARG1, lstlst); + return scm_append (lstlst); +} +#undef FUNC_NAME + -SCM_REGISTER_PROC (s_srfi1_concatenate, "concatenate", 1, 0, 0, scm_append); -SCM_REGISTER_PROC (s_srfi1_concatenate_x, "concatenate!", 1, 0, 0, scm_append_x); +SCM_DEFINE (scm_srfi1_concatenate_x, "concatenate!", 1, 0, 0, + (SCM lstlst), + "Construct a list by appending all lists in @var{lstlst}. Those\n" + "lists may be modified to produce the result.\n" + "\n" + "@code{concatenate!} is the same as @code{(apply append!\n" + "@var{lstlst})}. It exists because some Scheme implementations\n" + "have a limit on the number of arguments a function takes, which\n" + "the @code{apply} might exceed. In Guile there is no such\n" + "limit.") +#define FUNC_NAME s_scm_srfi1_concatenate +{ + SCM_VALIDATE_LIST (SCM_ARG1, lstlst); + return scm_append_x (lstlst); +} +#undef FUNC_NAME SCM_DEFINE (scm_srfi1_count, "count", 2, 0, 1, diff --git a/srfi/srfi-1.h b/srfi/srfi-1.h index fff493552..922de3d4b 100644 --- a/srfi/srfi-1.h +++ b/srfi/srfi-1.h @@ -33,6 +33,8 @@ #endif SCM_SRFI1_API SCM scm_srfi1_alist_copy (SCM alist); +SCM_SRFI1_API SCM scm_srfi1_concatenate (SCM lstlst); +SCM_SRFI1_API SCM scm_srfi1_concatenate_x (SCM lstlst); SCM_SRFI1_API SCM scm_srfi1_count (SCM pred, SCM list1, SCM rest); SCM_SRFI1_API SCM scm_srfi1_delete (SCM x, SCM lst, SCM pred); SCM_SRFI1_API SCM scm_srfi1_delete_x (SCM x, SCM lst, SCM pred);