summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2023-10-05 14:56:33 -0700
committerKaz Kylheku <kaz@kylheku.com>2023-10-05 14:56:33 -0700
commit1a8ca97932bc4c923ba7d5f2ae27b2bf754884b8 (patch)
tree6a9c0cb0f36a4a422140359123abed5be407fbdd /eval.c
parent3b87081903c42cdfe0eaf58629b90a83351b7a87 (diff)
downloadtxr-1a8ca97932bc4c923ba7d5f2ae27b2bf754884b8.tar.gz
txr-1a8ca97932bc4c923ba7d5f2ae27b2bf754884b8.tar.bz2
txr-1a8ca97932bc4c923ba7d5f2ae27b2bf754884b8.zip
New: length-list-<, length-<
These are functions for testing whether a list or sequence is shorter than a given integer. This is cheaper than calculating the length of lists, which is in some cases impossible if they are infinite. A length-str-< function already exists, useful with lazy strings. length-< uses length-list-< or length-str-< as appropriate * lib.[ch] (length_list_lt, length_lt): New functions. * eval.c (eval_init): length-list-< and length-< intrinsics registered. * tests/012/seq.tl: New tests. * txr.1: Documented.
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/eval.c b/eval.c
index d5cc61c8..42a7d67f 100644
--- a/eval.c
+++ b/eval.c
@@ -7280,6 +7280,7 @@ void eval_init(void)
reg_fun(intern(lit("proper-list-p"), user_package), proper_list_p_f);
}
reg_fun(intern(lit("length-list"), user_package), func_n1(length_list));
+ reg_fun(intern(lit("length-list-<"), user_package), func_n2(length_list_lt));
reg_fun(intern(lit("mapcar"), user_package), func_n1v(mapcarv));
reg_fun(intern(lit("mapcar*"), user_package), func_n1v(lazy_mapcarv));
@@ -7739,6 +7740,7 @@ void eval_init(void)
reg_fun(intern(lit("str-seq"), user_package), func_n1(str_seq));
reg_fun(intern(lit("length"), user_package), length_f);
reg_fun(intern(lit("len"), user_package), length_f);
+ reg_fun(intern(lit("length-<"), user_package), func_n2(length_lt));
reg_fun(intern(lit("empty"), user_package), func_n1(empty));
reg_fun(intern(lit("copy"), user_package), func_n1(copy));
reg_fun(intern(lit("sub"), user_package), func_n3o(sub, 1));