1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-12 06:41:13 +02:00

* list.c, list.h: Use SCM_P instead of CPP hair. Doc fixes.

* list.c (scm_member, scm_memv, scm_memq): Return #f if a matching
element is not found, as per R4RS.
This commit is contained in:
Jim Blandy 1996-10-03 05:17:17 +00:00
parent e7247600b3
commit df13742c0a
2 changed files with 130 additions and 315 deletions

View file

@ -54,8 +54,9 @@
#endif #endif
/* creating lists */
/* SCM_P won't help us deal with varargs here. */
#ifdef __STDC__ #ifdef __STDC__
SCM SCM
scm_listify (SCM elt, ...) scm_listify (SCM elt, ...)
@ -64,7 +65,6 @@ SCM
scm_listify (elt, va_alist) scm_listify (elt, va_alist)
SCM elt; SCM elt;
va_dcl va_dcl
#endif #endif
{ {
va_list foo; va_list foo;
@ -85,14 +85,9 @@ scm_listify (elt, va_alist)
SCM_PROC(s_list, "list", 0, 0, 1, scm_list); SCM_PROC(s_list, "list", 0, 0, 1, scm_list);
#ifdef __STDC__
SCM
scm_list(SCM objs)
#else
SCM SCM
scm_list(objs) scm_list(objs)
SCM objs; SCM objs;
#endif
{ {
return objs; return objs;
} }
@ -100,29 +95,20 @@ scm_list(objs)
/* general questions about lists --- null?, list?, length, etc. */
SCM_PROC(s_null_p, "null?", 1, 0, 0, scm_null_p); SCM_PROC(s_null_p, "null?", 1, 0, 0, scm_null_p);
#ifdef __STDC__
SCM
scm_null_p(SCM x)
#else
SCM SCM
scm_null_p(x) scm_null_p(x)
SCM x; SCM x;
#endif
{ {
return SCM_NULLP(x) ? SCM_BOOL_T : SCM_BOOL_F; return SCM_NULLP(x) ? SCM_BOOL_T : SCM_BOOL_F;
} }
SCM_PROC(s_list_p, "list?", 1, 0, 0, scm_list_p); SCM_PROC(s_list_p, "list?", 1, 0, 0, scm_list_p);
#ifdef __STDC__
SCM
scm_list_p(SCM x)
#else
SCM SCM
scm_list_p(x) scm_list_p(x)
SCM x; SCM x;
#endif
{ {
if (scm_ilength(x)<0) if (scm_ilength(x)<0)
return SCM_BOOL_F; return SCM_BOOL_F;
@ -131,41 +117,41 @@ scm_list_p(x)
} }
#ifdef __STDC__ /* Return the length of SX, or -1 if it's not a proper list.
long This uses the "tortise and hare" algorithm to detect "infinitely
scm_ilength(SCM sx) long" lists (i.e. lists with cycles in their cdrs), and returns -1
#else if it does find one. */
long long
scm_ilength(sx) scm_ilength(sx)
SCM sx; SCM sx;
#endif
{ {
register long i = 0; register long i = 0;
register SCM x = sx; register SCM tortise = sx;
register SCM hare = sx;
do { do {
if SCM_IMP(x) return SCM_NULLP(x) ? i : -1; if SCM_IMP(hare) return SCM_NULLP(hare) ? i : -1;
if SCM_NCONSP(x) return -1; if SCM_NCONSP(hare) return -1;
x = SCM_CDR(x); hare = SCM_CDR(hare);
i++; i++;
if SCM_IMP(x) return SCM_NULLP(x) ? i : -1; if SCM_IMP(hare) return SCM_NULLP(hare) ? i : -1;
if SCM_NCONSP(x) return -1; if SCM_NCONSP(hare) return -1;
x = SCM_CDR(x); hare = SCM_CDR(hare);
i++; i++;
sx = SCM_CDR(sx); /* For every two steps the hare takes, the tortise takes one. */
tortise = SCM_CDR(tortise);
} }
while (x != sx); while (hare != tortise);
/* If the tortise ever catches the hare, then the list must contain
a cycle. */
return -1; return -1;
} }
SCM_PROC(s_list_length, "list-length", 1, 0, 0, scm_list_length); SCM_PROC(s_list_length, "list-length", 1, 0, 0, scm_list_length);
#ifdef __STDC__
SCM
scm_list_length(SCM x)
#else
SCM SCM
scm_list_length(x) scm_list_length(x)
SCM x; SCM x;
#endif
{ {
int i; int i;
i = scm_ilength(x); i = scm_ilength(x);
@ -175,16 +161,12 @@ scm_list_length(x)
/* appending lists */
SCM_PROC (s_list_append, "list-append", 0, 0, 1, scm_list_append); SCM_PROC (s_list_append, "list-append", 0, 0, 1, scm_list_append);
#ifdef __STDC__
SCM
scm_list_append(SCM args)
#else
SCM SCM
scm_list_append(args) scm_list_append(args)
SCM args; SCM args;
#endif
{ {
SCM res = SCM_EOL; SCM res = SCM_EOL;
SCM *lloc = &res, arg; SCM *lloc = &res, arg;
@ -213,14 +195,9 @@ scm_list_append(args)
SCM_PROC (s_list_append_x, "list-append!", 0, 0, 1, scm_list_append_x); SCM_PROC (s_list_append_x, "list-append!", 0, 0, 1, scm_list_append_x);
#ifdef __STDC__
SCM
scm_list_append_x(SCM args)
#else
SCM SCM
scm_list_append_x(args) scm_list_append_x(args)
SCM args; SCM args;
#endif
{ {
SCM arg; SCM arg;
tail: tail:
@ -235,18 +212,37 @@ scm_list_append_x(args)
} }
SCM_PROC(s_last_pair, "last-pair", 1, 0, 0, scm_last_pair);
SCM
scm_last_pair(sx)
SCM sx;
{
register SCM res = sx;
register SCM x;
if (SCM_NULLP (sx))
return SCM_EOL;
SCM_ASSERT(SCM_NIMP(res) && SCM_CONSP(res), res, SCM_ARG1, s_last_pair);
while (!0) {
x = SCM_CDR(res);
if (SCM_IMP(x) || SCM_NCONSP(x)) return res;
res = x;
x = SCM_CDR(res);
if (SCM_IMP(x) || SCM_NCONSP(x)) return res;
res = x;
sx = SCM_CDR(sx);
SCM_ASSERT(x != sx, sx, SCM_ARG1, s_last_pair);
}
}
/* reversing lists */
SCM_PROC (s_list_reverse, "list-reverse", 1, 0, 0, scm_list_reverse); SCM_PROC (s_list_reverse, "list-reverse", 1, 0, 0, scm_list_reverse);
#ifdef __STDC__
SCM
scm_list_reverse(SCM lst)
#else
SCM SCM
scm_list_reverse(lst) scm_list_reverse(lst)
SCM lst; SCM lst;
#endif
{ {
SCM res = SCM_EOL; SCM res = SCM_EOL;
SCM p = lst; SCM p = lst;
@ -259,15 +255,10 @@ scm_list_reverse(lst)
} }
SCM_PROC (s_list_reverse_x, "list-reverse!", 1, 1, 0, scm_list_reverse_x); SCM_PROC (s_list_reverse_x, "list-reverse!", 1, 1, 0, scm_list_reverse_x);
#ifdef __STDC__
SCM
scm_list_reverse_x (SCM lst, SCM newtail)
#else
SCM SCM
scm_list_reverse_x (lst, newtail) scm_list_reverse_x (lst, newtail)
SCM lst; SCM lst;
SCM newtail; SCM newtail;
#endif
{ {
SCM old_tail; SCM old_tail;
if (newtail == SCM_UNDEFINED) if (newtail == SCM_UNDEFINED)
@ -289,18 +280,13 @@ scm_list_reverse_x (lst, newtail)
/* indexing lists by element number */
SCM_PROC(s_list_ref, "list-ref", 2, 0, 0, scm_list_ref); SCM_PROC(s_list_ref, "list-ref", 2, 0, 0, scm_list_ref);
#ifdef __STDC__
SCM
scm_list_ref(SCM lst, SCM k)
#else
SCM SCM
scm_list_ref(lst, k) scm_list_ref(lst, k)
SCM lst; SCM lst;
SCM k; SCM k;
#endif
{ {
register long i; register long i;
SCM_ASSERT(SCM_INUMP(k), k, SCM_ARG2, s_list_ref); SCM_ASSERT(SCM_INUMP(k), k, SCM_ARG2, s_list_ref);
@ -316,16 +302,11 @@ erout: SCM_ASSERT(SCM_NIMP(lst) && SCM_CONSP(lst),
} }
SCM_PROC(s_list_set_x, "list-set!", 3, 0, 0, scm_list_set_x); SCM_PROC(s_list_set_x, "list-set!", 3, 0, 0, scm_list_set_x);
#ifdef __STDC__
SCM
scm_list_set_x(SCM lst, SCM k, SCM val)
#else
SCM SCM
scm_list_set_x(lst, k, val) scm_list_set_x(lst, k, val)
SCM lst; SCM lst;
SCM k; SCM k;
SCM val; SCM val;
#endif
{ {
register long i; register long i;
SCM_ASSERT(SCM_INUMP(k), k, SCM_ARG2, s_list_set_x); SCM_ASSERT(SCM_INUMP(k), k, SCM_ARG2, s_list_set_x);
@ -342,18 +323,30 @@ erout: SCM_ASSERT(SCM_NIMP(lst) && SCM_CONSP(lst),
} }
SCM_PROC(s_list_cdr_ref, "list-cdr-ref", 2, 0, 0, scm_list_tail);
SCM_PROC(s_list_tail, "list-tail", 2, 0, 0, scm_list_tail);
SCM
scm_list_tail(lst, k)
SCM lst;
SCM k;
{
register long i;
SCM_ASSERT(SCM_INUMP(k), k, SCM_ARG2, s_list_tail);
i = SCM_INUM(k);
while (i-- > 0) {
SCM_ASSERT(SCM_NIMP(lst) && SCM_CONSP(lst), lst, SCM_ARG1, s_list_tail);
lst = SCM_CDR(lst);
}
return lst;
}
SCM_PROC(s_list_cdr_set_x, "list-cdr-set!", 3, 0, 0, scm_list_cdr_set_x); SCM_PROC(s_list_cdr_set_x, "list-cdr-set!", 3, 0, 0, scm_list_cdr_set_x);
#ifdef __STDC__
SCM
scm_list_cdr_set_x(SCM lst, SCM k, SCM val)
#else
SCM SCM
scm_list_cdr_set_x(lst, k, val) scm_list_cdr_set_x(lst, k, val)
SCM lst; SCM lst;
SCM k; SCM k;
SCM val; SCM val;
#endif
{ {
register long i; register long i;
SCM_ASSERT(SCM_INUMP(k), k, SCM_ARG2, s_list_cdr_set_x); SCM_ASSERT(SCM_INUMP(k), k, SCM_ARG2, s_list_cdr_set_x);
@ -371,71 +364,13 @@ erout: SCM_ASSERT(SCM_NIMP(lst) && SCM_CONSP(lst),
/* copying lists, perhaps partially */
SCM_PROC(s_last_pair, "last-pair", 1, 0, 0, scm_last_pair);
#ifdef __STDC__
SCM
scm_last_pair(SCM sx)
#else
SCM
scm_last_pair(sx)
SCM sx;
#endif
{
register SCM res = sx;
register SCM x;
if (SCM_NULLP (sx))
return SCM_EOL;
SCM_ASSERT(SCM_NIMP(res) && SCM_CONSP(res), res, SCM_ARG1, s_last_pair);
while (!0) {
x = SCM_CDR(res);
if (SCM_IMP(x) || SCM_NCONSP(x)) return res;
res = x;
x = SCM_CDR(res);
if (SCM_IMP(x) || SCM_NCONSP(x)) return res;
res = x;
sx = SCM_CDR(sx);
SCM_ASSERT(x != sx, sx, SCM_ARG1, s_last_pair);
}
}
SCM_PROC(s_list_cdr_ref, "list-cdr-ref", 2, 0, 0, scm_list_tail);
SCM_PROC(s_list_tail, "list-tail", 2, 0, 0, scm_list_tail);
#ifdef __STDC__
SCM
scm_list_tail(SCM lst, SCM k)
#else
SCM
scm_list_tail(lst, k)
SCM lst;
SCM k;
#endif
{
register long i;
SCM_ASSERT(SCM_INUMP(k), k, SCM_ARG2, s_list_tail);
i = SCM_INUM(k);
while (i-- > 0) {
SCM_ASSERT(SCM_NIMP(lst) && SCM_CONSP(lst), lst, SCM_ARG1, s_list_tail);
lst = SCM_CDR(lst);
}
return lst;
}
SCM_PROC(s_list_head, "list-head", 2, 0, 0, scm_list_head); SCM_PROC(s_list_head, "list-head", 2, 0, 0, scm_list_head);
#ifdef __STDC__
SCM
scm_list_head(SCM lst, SCM k)
#else
SCM SCM
scm_list_head(lst, k) scm_list_head(lst, k)
SCM lst; SCM lst;
SCM k; SCM k;
#endif
{ {
SCM answer; SCM answer;
SCM * pos; SCM * pos;
@ -456,33 +391,50 @@ scm_list_head(lst, k)
} }
SCM_PROC (s_list_copy, "list-copy", 1, 0, 0, scm_list_copy);
SCM
scm_list_copy (lst)
SCM lst;
{
SCM newlst;
SCM * fill_here;
SCM from_here;
newlst = SCM_EOL;
fill_here = &newlst;
from_here = lst;
while (SCM_NIMP (from_here) && SCM_CONSP (from_here))
{
SCM c;
c = scm_cons (SCM_CAR (from_here), SCM_CDR (from_here));
*fill_here = c;
fill_here = &SCM_CDR (c);
from_here = SCM_CDR (from_here);
}
return newlst;
}
/* membership tests (memq, memv, etc.) */
static void sloppy_mem_check SCM_P ((SCM obj, char * where, char * why));
#ifdef __STDC__
static void
sloppy_mem_check (SCM obj, char * where, char * why)
#else
static void static void
sloppy_mem_check (obj, where, why) sloppy_mem_check (obj, where, why)
SCM obj; SCM obj;
char * where; char * where;
char * why; char * why;
#endif
{ {
SCM_ASSERT ((scm_ilength (obj) >= 0), obj, where, why); SCM_ASSERT ((scm_ilength (obj) >= 0), obj, where, why);
} }
SCM_PROC (s_sloppy_memq, "sloppy-memq", 2, 0, 0, scm_sloppy_memq); SCM_PROC (s_sloppy_memq, "sloppy-memq", 2, 0, 0, scm_sloppy_memq);
#ifdef __STDC__
SCM
scm_sloppy_memq(SCM x, SCM lst)
#else
SCM SCM
scm_sloppy_memq(x, lst) scm_sloppy_memq(x, lst)
SCM x; SCM x;
SCM lst; SCM lst;
#endif
{ {
for(; SCM_NIMP(lst) && SCM_CONSP (lst); lst = SCM_CDR(lst)) for(; SCM_NIMP(lst) && SCM_CONSP (lst); lst = SCM_CDR(lst))
{ {
@ -494,15 +446,10 @@ scm_sloppy_memq(x, lst)
SCM_PROC (s_sloppy_memv, "sloppy-memv", 2, 0, 0, scm_sloppy_memv); SCM_PROC (s_sloppy_memv, "sloppy-memv", 2, 0, 0, scm_sloppy_memv);
#ifdef __STDC__
SCM
scm_sloppy_memv(SCM x, SCM lst)
#else
SCM SCM
scm_sloppy_memv(x, lst) scm_sloppy_memv(x, lst)
SCM x; SCM x;
SCM lst; SCM lst;
#endif
{ {
for(; SCM_NIMP(lst) && SCM_CONSP (lst); lst = SCM_CDR(lst)) for(; SCM_NIMP(lst) && SCM_CONSP (lst); lst = SCM_CDR(lst))
{ {
@ -514,15 +461,10 @@ scm_sloppy_memv(x, lst)
SCM_PROC (s_sloppy_member, "sloppy-member", 2, 0, 0, scm_sloppy_member); SCM_PROC (s_sloppy_member, "sloppy-member", 2, 0, 0, scm_sloppy_member);
#ifdef __STDC__
SCM
scm_sloppy_member (SCM x, SCM lst)
#else
SCM SCM
scm_sloppy_member (x, lst) scm_sloppy_member (x, lst)
SCM x; SCM x;
SCM lst; SCM lst;
#endif
{ {
for(; SCM_NIMP(lst) && SCM_CONSP (lst); lst = SCM_CDR(lst)) for(; SCM_NIMP(lst) && SCM_CONSP (lst); lst = SCM_CDR(lst))
{ {
@ -535,72 +477,53 @@ scm_sloppy_member (x, lst)
SCM_PROC(s_memq, "memq", 2, 0, 0, scm_memq); SCM_PROC(s_memq, "memq", 2, 0, 0, scm_memq);
#ifdef __STDC__
SCM
scm_memq(SCM x, SCM lst)
#else
SCM SCM
scm_memq(x, lst) scm_memq(x, lst)
SCM x; SCM x;
SCM lst; SCM lst;
#endif
{ {
SCM answer; SCM answer;
answer = scm_sloppy_memq (x, lst); answer = scm_sloppy_memq (x, lst);
sloppy_mem_check (answer, (char *)SCM_ARG2, s_memq); sloppy_mem_check (answer, (char *)SCM_ARG2, s_memq);
return answer; return (answer == SCM_EOL) ? SCM_BOOL_F : answer;
} }
SCM_PROC(s_memv, "memv", 2, 0, 0, scm_memv); SCM_PROC(s_memv, "memv", 2, 0, 0, scm_memv);
#ifdef __STDC__
SCM
scm_memv(SCM x, SCM lst)
#else
SCM SCM
scm_memv(x, lst) scm_memv(x, lst)
SCM x; SCM x;
SCM lst; SCM lst;
#endif
{ {
SCM answer; SCM answer;
answer = scm_sloppy_memv (x, lst); answer = scm_sloppy_memv (x, lst);
sloppy_mem_check (answer, (char *)SCM_ARG2, s_memv); sloppy_mem_check (answer, (char *)SCM_ARG2, s_memv);
return answer; return (answer == SCM_EOL) ? SCM_BOOL_F : answer;
} }
SCM_PROC(s_member, "member", 2, 0, 0, scm_member); SCM_PROC(s_member, "member", 2, 0, 0, scm_member);
#ifdef __STDC__
SCM
scm_member(SCM x, SCM lst)
#else
SCM SCM
scm_member(x, lst) scm_member(x, lst)
SCM x; SCM x;
SCM lst; SCM lst;
#endif
{ {
SCM answer; SCM answer;
answer = scm_sloppy_member (x, lst); answer = scm_sloppy_member (x, lst);
sloppy_mem_check (answer, (char *)SCM_ARG2, s_member); sloppy_mem_check (answer, (char *)SCM_ARG2, s_member);
return answer; return (answer == SCM_EOL) ? SCM_BOOL_F : answer;
} }
/* deleting elements from a list (delq, etc.) */
SCM_PROC(s_delq_x, "delq!", 2, 0, 0, scm_delq_x); SCM_PROC(s_delq_x, "delq!", 2, 0, 0, scm_delq_x);
#ifdef __STDC__
SCM
scm_delq_x (SCM item, SCM lst)
#else
SCM SCM
scm_delq_x (item, lst) scm_delq_x (item, lst)
SCM item; SCM item;
SCM lst; SCM lst;
#endif
{ {
SCM start; SCM start;
@ -626,15 +549,10 @@ scm_delq_x (item, lst)
SCM_PROC(s_delv_x, "delv!", 2, 0, 0, scm_delv_x); SCM_PROC(s_delv_x, "delv!", 2, 0, 0, scm_delv_x);
#ifdef __STDC__
SCM
scm_delv_x (SCM item, SCM lst)
#else
SCM SCM
scm_delv_x (item, lst) scm_delv_x (item, lst)
SCM item; SCM item;
SCM lst; SCM lst;
#endif
{ {
SCM start; SCM start;
@ -661,15 +579,10 @@ scm_delv_x (item, lst)
SCM_PROC(s_delete_x, "delete!", 2, 0, 0, scm_delete_x); SCM_PROC(s_delete_x, "delete!", 2, 0, 0, scm_delete_x);
#ifdef __STDC__
SCM
scm_delete_x (SCM item, SCM lst)
#else
SCM SCM
scm_delete_x (item, lst) scm_delete_x (item, lst)
SCM item; SCM item;
SCM lst; SCM lst;
#endif
{ {
SCM start; SCM start;
@ -696,47 +609,12 @@ scm_delete_x (item, lst)
SCM_PROC (s_list_copy, "list-copy", 1, 0, 0, scm_list_copy);
#ifdef __STDC__
SCM
scm_list_copy (SCM lst)
#else
SCM
scm_list_copy (lst)
SCM lst;
#endif
{
SCM newlst;
SCM * fill_here;
SCM from_here;
newlst = SCM_EOL;
fill_here = &newlst;
from_here = lst;
while (SCM_NIMP (from_here) && SCM_CONSP (from_here))
{
SCM c;
c = scm_cons (SCM_CAR (from_here), SCM_CDR (from_here));
*fill_here = c;
fill_here = &SCM_CDR (c);
from_here = SCM_CDR (from_here);
}
return newlst;
}
SCM_PROC (s_delq, "delq", 2, 0, 0, scm_delq); SCM_PROC (s_delq, "delq", 2, 0, 0, scm_delq);
#ifdef __STDC__
SCM
scm_delq (SCM item, SCM lst)
#else
SCM SCM
scm_delq (item, lst) scm_delq (item, lst)
SCM item; SCM item;
SCM lst; SCM lst;
#endif
{ {
SCM copy; SCM copy;
@ -745,15 +623,10 @@ scm_delq (item, lst)
} }
SCM_PROC (s_delv, "delv", 2, 0, 0, scm_delv); SCM_PROC (s_delv, "delv", 2, 0, 0, scm_delv);
#ifdef __STDC__
SCM
scm_delv (SCM item, SCM lst)
#else
SCM SCM
scm_delv (item, lst) scm_delv (item, lst)
SCM item; SCM item;
SCM lst; SCM lst;
#endif
{ {
SCM copy; SCM copy;
@ -762,15 +635,10 @@ scm_delv (item, lst)
} }
SCM_PROC (s_delete, "delete", 2, 0, 0, scm_delete); SCM_PROC (s_delete, "delete", 2, 0, 0, scm_delete);
#ifdef __STDC__
SCM
scm_delete (SCM item, SCM lst)
#else
SCM SCM
scm_delete (item, lst) scm_delete (item, lst)
SCM item; SCM item;
SCM lst; SCM lst;
#endif
{ {
SCM copy; SCM copy;
@ -780,15 +648,8 @@ scm_delete (item, lst)
#ifdef __STDC__
void
scm_init_list (void)
#else
void void
scm_init_list () scm_init_list ()
#endif
{ {
#include "list.x" #include "list.x"
} }

View file

@ -47,82 +47,36 @@
#include "libguile/__scm.h" #include "libguile/__scm.h"
extern SCM scm_list_head SCM_P ((SCM lst, SCM k));
extern SCM scm_listify SCM_P ((SCM elt, ...));
extern SCM scm_list SCM_P ((SCM objs));
extern SCM scm_null_p SCM_P ((SCM x));
#ifdef __STDC__ extern SCM scm_list_p SCM_P ((SCM x));
extern SCM scm_list_head (SCM lst, SCM k); extern long scm_ilength SCM_P ((SCM sx));
extern SCM scm_listify (SCM elt, ...); extern SCM scm_list_length SCM_P ((SCM x));
extern SCM scm_list(SCM objs); extern SCM scm_list_append SCM_P ((SCM args));
extern SCM scm_null_p(SCM x); extern SCM scm_list_append_x SCM_P ((SCM args));
extern SCM scm_list_p(SCM x); extern SCM scm_list_reverse SCM_P ((SCM lst));
extern long scm_ilength(SCM sx); extern SCM scm_list_reverse_x SCM_P ((SCM lst, SCM newtail));
extern SCM scm_list_length(SCM x); extern SCM scm_list_ref SCM_P ((SCM lst, SCM k));
extern SCM scm_list_append(SCM args); extern SCM scm_list_set_x SCM_P ((SCM lst, SCM k, SCM val));
extern SCM scm_list_append_x(SCM args); extern SCM scm_list_cdr_ref SCM_P ((SCM lst, SCM k));
extern SCM scm_list_reverse(SCM lst); extern SCM scm_list_cdr_set_x SCM_P ((SCM lst, SCM k, SCM val));
extern SCM scm_list_reverse_x (SCM lst, SCM newtail); extern SCM scm_last_pair SCM_P ((SCM sx));
extern SCM scm_list_ref(SCM lst, SCM k); extern SCM scm_list_tail SCM_P ((SCM lst, SCM k));
extern SCM scm_list_set_x(SCM lst, SCM k, SCM val); extern SCM scm_sloppy_memq SCM_P ((SCM x, SCM lst));
extern SCM scm_list_cdr_ref(SCM lst, SCM k); extern SCM scm_sloppy_memv SCM_P ((SCM x, SCM lst));
extern SCM scm_list_cdr_set_x(SCM lst, SCM k, SCM val); extern SCM scm_sloppy_member SCM_P ((SCM x, SCM lst));
extern SCM scm_last_pair(SCM sx); extern SCM scm_memq SCM_P ((SCM x, SCM lst));
extern SCM scm_list_tail(SCM lst, SCM k); extern SCM scm_memv SCM_P ((SCM x, SCM lst));
extern SCM scm_sloppy_memq(SCM x, SCM lst); extern SCM scm_member SCM_P ((SCM x, SCM lst));
extern SCM scm_sloppy_memv(SCM x, SCM lst); extern SCM scm_delq_x SCM_P ((SCM item, SCM lst));
extern SCM scm_sloppy_member (SCM x, SCM lst); extern SCM scm_delv_x SCM_P ((SCM item, SCM lst));
extern SCM scm_memq(SCM x, SCM lst); extern SCM scm_delete_x SCM_P ((SCM item, SCM lst));
extern SCM scm_memv(SCM x, SCM lst); extern SCM scm_list_copy SCM_P ((SCM lst));
extern SCM scm_member(SCM x, SCM lst); extern SCM scm_delq SCM_P ((SCM item, SCM lst));
extern SCM scm_delq_x (SCM item, SCM lst); extern SCM scm_delv SCM_P ((SCM item, SCM lst));
extern SCM scm_delv_x (SCM item, SCM lst); extern SCM scm_delete SCM_P ((SCM item, SCM lst));
extern SCM scm_delete_x (SCM item, SCM lst); extern void scm_init_list SCM_P ((void));
extern SCM scm_list_copy (SCM lst);
extern SCM scm_delq (SCM item, SCM lst);
extern SCM scm_delv (SCM item, SCM lst);
extern SCM scm_delete (SCM item, SCM lst);
extern void scm_init_list (void);
#else /* STDC */
extern SCM scm_list_head ();
extern SCM scm_listify ();
extern SCM scm_list();
extern SCM scm_null_p();
extern SCM scm_list_p();
extern long scm_ilength();
extern SCM scm_list_length();
extern SCM scm_list_append();
extern SCM scm_list_append_x();
extern SCM scm_list_reverse();
extern SCM scm_list_reverse_x ();
extern SCM scm_list_ref();
extern SCM scm_list_set_x();
extern SCM scm_list_cdr_ref();
extern SCM scm_list_cdr_set_x();
extern SCM scm_last_pair();
extern SCM scm_list_tail();
extern SCM scm_sloppy_memq();
extern SCM scm_sloppy_memv();
extern SCM scm_sloppy_member ();
extern SCM scm_memq();
extern SCM scm_memv();
extern SCM scm_member();
extern SCM scm_delq_x ();
extern SCM scm_delv_x ();
extern SCM scm_delete_x ();
extern SCM scm_list_copy ();
extern SCM scm_delq ();
extern SCM scm_delv ();
extern SCM scm_delete ();
extern void scm_init_list ();
#endif /* STDC */
#endif /* LISTH */ #endif /* LISTH */