summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2019-09-30 06:51:51 -0700
committerKaz Kylheku <kaz@kylheku.com>2019-09-30 06:51:51 -0700
commit48ef128584e4b15c8b83de0f10f6d077031fa0ee (patch)
tree7b05fd6dd3f85dbd9033b587a2c67a6f870706a2
parent7e2327cd393cb1ada82ff2b80dcff73a05d98f80 (diff)
downloadtxr-48ef128584e4b15c8b83de0f10f6d077031fa0ee.tar.gz
txr-48ef128584e4b15c8b83de0f10f6d077031fa0ee.tar.bz2
txr-48ef128584e4b15c8b83de0f10f6d077031fa0ee.zip
tree: add treep predicate.
* tree.c (treep): new function. (tree_init): Registered treep intrinsic.
-rw-r--r--tree.c6
-rw-r--r--tree.h1
2 files changed, 7 insertions, 0 deletions
diff --git a/tree.c b/tree.c
index a9063873..45132648 100644
--- a/tree.c
+++ b/tree.c
@@ -588,6 +588,11 @@ static val tree_construct(val opts, val keys)
return tree(keys, key_fn, less_fn, equal_fn);
}
+val treep(val obj)
+{
+ return tnil(type(obj) == COBJ && obj->co.cls == tree_s);
+}
+
void tree_init(void)
{
tree_s = intern(lit("tree"), user_package);
@@ -598,6 +603,7 @@ void tree_init(void)
reg_fun(intern(lit("key"), user_package), func_n1(key));
reg_fun(tree_s, func_n4o(tree, 0));
reg_fun(tree_construct_s, func_n2(tree_construct));
+ reg_fun(intern(lit("treep"), user_package), func_n1(treep));
reg_fun(intern(lit("tree-insert-node"), user_package), func_n2(tree_insert_node));
reg_fun(intern(lit("tree-insert"), user_package), func_n2(tree_insert));
reg_fun(intern(lit("tree-lookup-node"), user_package), func_n2(tree_lookup_node));
diff --git a/tree.h b/tree.h
index 7a27d7b1..32f846e9 100644
--- a/tree.h
+++ b/tree.h
@@ -35,4 +35,5 @@ val left(val node);
val right(val node);
val key(val node);
val tree(val keys, val key_fn, val less_fn, val equal_fn);
+val treep(val obj);
void tree_init(void);