From 269f576bf44e02dc78eb84bdef4f5fdb677ea041 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 15 Nov 2017 19:17:45 -0800 Subject: posq, posql, posqual, rposq, rposql, rposqual: rewrite * lib.c (posq, posql, posqual, rposq, rposql, rposqual): These functions are reduced to wrappers around pos and rpos, respectively, so they generalize properly and efficiently to sequences of all kinds. --- lib.c | 123 ++++++++++++++++-------------------------------------------------- 1 file changed, 30 insertions(+), 93 deletions(-) (limited to 'lib.c') diff --git a/lib.c b/lib.c index c8704705..7ec6b1b2 100644 --- a/lib.c +++ b/lib.c @@ -8708,99 +8708,6 @@ val rfind_if(val predi, val seq, val key) return found; } -val posqual(val obj, val list) -{ - val pos = zero; - - list = nullify(list); - - gc_hint(list); - - for (; list; list = cdr(list), pos = plus(pos, one)) - if (equal(car(list), obj)) - return pos; - - return nil; -} - -val rposqual(val obj, val list) -{ - val pos = zero; - val found = nil; - - list = nullify(list); - - gc_hint(list); - - for (; list; list = cdr(list), pos = plus(pos, one)) - if (equal(car(list), obj)) - found = pos; - - return found; -} - -val posql(val obj, val list) -{ - val pos = zero; - - list = nullify(list); - - gc_hint(list); - - for (; list; list = cdr(list), pos = plus(pos, one)) - if (eql(car(list), obj)) - return pos; - - return nil; -} - -val rposql(val obj, val list) -{ - val pos = zero; - val found = nil; - - list = nullify(list); - - gc_hint(list); - - for (; list; list = cdr(list), pos = plus(pos, one)) - if (eql(car(list), obj)) - pos = found; - - return pos; -} - -val posq(val obj, val list) -{ - val pos = zero; - - list = nullify(list); - - gc_hint(list); - - for (; list; list = cdr(list), pos = plus(pos, one)) - if (car(list) == obj) - return pos; - - return nil; -} - -val rposq(val obj, val list) -{ - val pos = zero; - val found = nil; - - list = nullify(list); - - gc_hint(list); - - for (; list; list = cdr(list), pos = plus(pos, one)) - if (car(list) == obj) - found = pos; - - return found; -} - val pos(val item, val seq, val testfun, val keyfun) { testfun = default_arg(testfun, equal_f); @@ -8921,6 +8828,36 @@ val rpos(val item, val seq, val testfun, val keyfun) } } +val posqual(val obj, val list) +{ + return pos(obj, list, equal_f, identity_f); +} + +val rposqual(val obj, val list) +{ + return rpos(obj, list, equal_f, identity_f); +} + +val posql(val obj, val list) +{ + return pos(obj, list, eql_f, identity_f); +} + +val rposql(val obj, val list) +{ + return rpos(obj, list, eql_f, identity_f); +} + +val posq(val obj, val list) +{ + return pos(obj, list, eq_f, identity_f); +} + +val rposq(val obj, val list) +{ + return rpos(obj, list, eq_f, identity_f); +} + val pos_if(val pred, val list, val key) { val pos = zero; -- cgit v1.2.3