@code{(require 'srfi-1)} @ftindex srfi-1 @noindent Implements the @dfn{SRFI-1} @dfn{list-processing library} as described @cindex SRFI-1 @cindex list-processing library at @url{http://srfi.schemers.org/srfi-1/srfi-1.html} @subheading Constructors @defun xcons d a @code{(define (xcons d a) (cons a d))}. @end defun @defun list-tabulate len proc Returns a list of length @var{len}. Element @var{i} is @code{(@var{proc} @var{i})} for 0 <= @var{i} < @var{len}. @end defun @defun cons* obj1 obj2 @end defun @defun list-copy flist @end defun @defun iota count start step @defunx iota count start @defunx iota count Returns a list of @var{count} numbers: (@var{start}, @var{start}+@var{step}, @dots{}, @var{start}+(@var{count}-1)*@var{step}). @end defun @defun circular-list obj1 obj2 @dots{} Returns a circular list of @var{obj1}, @var{obj2}, @dots{}. @end defun @subheading Predicates @defun proper-list? obj @end defun @defun circular-list? x @end defun @defun dotted-list? obj @end defun @defun null-list? obj @end defun @defun not-pair? obj @end defun @defun list= =pred list @dots{} @end defun @subheading Selectors @defun first pair @end defun @defun second pair @end defun @defun third pair @end defun @defun fourth pair @end defun @defun fifth pair @defunx sixth pair @defunx seventh pair @defunx eighth pair @defunx ninth pair @defunx tenth pair @end defun @defun car+cdr pair @end defun @defun drop lst k @defunx take lst k @defunx take! lst k @end defun @defun take-right lst k @end defun @defun drop-right lst k @end defun @deffn {Procedure} drop-right! lst k @end deffn @defun split-at lst k @defunx split-at! lst k @end defun @defun last lst k @dots{} @end defun @subheading Miscellaneous @defun length+ clist @end defun @defun concatenate lists @defunx concatenate! lists @end defun @deffn {Procedure} reverse! lst @end deffn @defun append-reverse rev-head tail @defunx append-reverse! rev-head tail @end defun @defun zip list1 list2 @dots{} @end defun @defun unzip1 lst @defunx unzip2 lst @defunx unzip3 lst @defunx unzip4 lst @defunx unzip5 lst @end defun @defun count pred list1 list2 @dots{} @end defun @subheading Fold and Unfold @defun fold kons knil clist1 clist2 @dots{} @end defun @defun fold-right kons knil clist1 clist2 @dots{} @end defun @defun pair-fold kons knil clist1 clist2 @dots{} @end defun @defun pair-fold-right kons knil clist1 clist2 @dots{} @end defun @defun reduce arg @dots{} @end defun @deffn {Procedure} map! f clist1 clist2 @dots{} @end deffn @defun pair-for-each f clist1 clist2 @dots{} @end defun @subheading Filtering and Partitioning @defun filter pred list @end defun @deffn {Procedure} filter! pred list @end deffn @defun partition pred list @end defun @defun remove pred list @end defun @deffn {Procedure} partition! pred list @end deffn @deffn {Procedure} remove! pred list @end deffn @subheading Searching @defun find pred clist @end defun @defun find-tail pred clist @end defun @defun span pred list @end defun @deffn {Procedure} span! pred list @end deffn @defun break pred list @end defun @deffn {Procedure} break! pred list @end deffn @defun any pred clist1 clist2 @dots{} @end defun @defun list-index pred clist1 clist2 @dots{} @end defun @defun member obj list = @defunx member obj list @end defun @subheading Deleting @defun delete-duplicates x list = @defunx delete-duplicates x list @end defun @deffn {Procedure} delete-duplicates! x list = @deffnx {Procedure} delete-duplicates! x list @end deffn @subheading Association lists @defun assoc obj alist pred @defunx assoc obj alist @end defun @defun alist-cons key datum alist @end defun @defun alist-copy alist @end defun @defun alist-delete key alist = @defunx alist-delete key alist @end defun @deffn {Procedure} alist-delete! key alist = @deffnx {Procedure} alist-delete! key alist @end deffn @subheading Set operations @defun lset<= = list1 @dots{} Determine if a transitive subset relation exists between the lists @var{list1} @dots{}, using @var{=} to determine equality of list members. @end defun @defun lset= = list1 list2 @dots{} @end defun @defun lset-adjoin list elt1 @dots{} @end defun @defun lset-union = list1 @dots{} @end defun @defun lset-intersection = list1 list2 @dots{} @end defun @defun lset-difference = list1 list2 @dots{} @end defun @defun lset-xor = list1 @dots{} @end defun @defun lset-diff+intersection = list1 list2 @dots{} @end defun @noindent These are linear-update variants. They are allowed, but not required, to use the cons cells in their first list parameter to construct their answer. @code{lset-union!} is permitted to recycle cons cells from any of its list arguments. @deffn {Procedure} lset-intersection! = list1 list2 @dots{} @end deffn @deffn {Procedure} lset-difference! = list1 list2 @dots{} @end deffn @deffn {Procedure} lset-union! = list1 @dots{} @end deffn @deffn {Procedure} lset-xor! = list1 @dots{} @end deffn @deffn {Procedure} lset-diff+intersection! = list1 list2 @dots{} @end deffn