summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c38
1 files changed, 13 insertions, 25 deletions
diff --git a/lib.c b/lib.c
index 8e1652e7..9c3f1e34 100644
--- a/lib.c
+++ b/lib.c
@@ -319,14 +319,14 @@ val push(val value, val *plist)
val copy_list(val list)
{
- list_collect_decl (out, tail);
+ list_collect_decl (out, ptail);
while (consp(list)) {
- list_collect(tail, car(list));
+ list_collect(ptail, car(list));
list = cdr(list);
}
- list_collect_terminate(tail, list);
+ list_collect_append(ptail, list);
return out;
}
@@ -359,14 +359,11 @@ val reverse(val in)
val append2(val list1, val list2)
{
- list_collect_decl (out, tail);
+ list_collect_decl (out, ptail);
- while (list1) {
- list_collect(tail, car(list1));
- list1 = cdr(list1);
- }
+ list_collect_append (ptail, list1);
+ list_collect_append (ptail, list2);
- list_collect_terminate(tail, list2);
return out;
}
@@ -376,14 +373,9 @@ val appendv(val lists)
for (; lists; lists = cdr(lists)) {
val item = car(lists);
- if (consp(item)) {
- list_collect_append(ptail, car(lists));
- } else {
- if (cdr(lists))
- uw_throwf(error_s, lit("append: ~s is not a list"), item, nao);
- list_collect_terminate(ptail, item);
- return out;
- }
+ if (listp(*ptail))
+ uw_throwf(error_s, lit("append: ~s is not a list"), *ptail, nao);
+ list_collect_append(ptail, item);
}
return out;
@@ -391,16 +383,12 @@ val appendv(val lists)
val nappend2(val list1, val list2)
{
- val temp, iter;
-
- if (list1 == nil)
- return list2;
+ list_collect_decl (out, ptail);
- for (iter = list1; (temp = cdr(iter)) != nil; iter = temp)
- ; /* empty */
+ list_collect_nconc (ptail, list1);
+ list_collect_nconc (ptail, list2);
- *cdr_l(iter) = list2;
- return list1;
+ return out;
}
val ldiff(val list1, val list2)