summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/lib.c b/lib.c
index 0fd695a5..515d5439 100644
--- a/lib.c
+++ b/lib.c
@@ -4857,6 +4857,19 @@ val length_list(val list)
return bn_len;
}
+val length_list_lt(val list, val len)
+{
+ val self = lit("length-list-lt");
+ cnum le = c_num(len, self);
+
+ while (consp(list) && le > 0) {
+ list = cdr(list);
+ le--;
+ }
+
+ return tnil(le > 0);
+}
+
static val length_proper_list(val list)
{
cnum len = 0;
@@ -13147,6 +13160,21 @@ val length(val seq)
}
}
+val length_lt(val seq, val len)
+{
+ switch (type(seq)) {
+ case NIL:
+ return if3(plusp(len), t, nil);
+ case CONS:
+ case LCONS:
+ return length_list_lt(seq, len);
+ case LSTR:
+ return length_str_lt(seq, len);
+ default:
+ return lt(length(seq), len);
+ }
+}
+
val sub(val seq, val from, val to)
{
switch (type(seq)) {