diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2017-11-15 19:17:45 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2017-11-15 19:17:45 -0800 |
commit | 269f576bf44e02dc78eb84bdef4f5fdb677ea041 (patch) | |
tree | 7c8a6f58b32cfcbb5f4eaeb798500d6908c35445 /lib.c | |
parent | a661a3989bd7865ad990c72ff2202f6cb6eef34a (diff) | |
download | txr-269f576bf44e02dc78eb84bdef4f5fdb677ea041.tar.gz txr-269f576bf44e02dc78eb84bdef4f5fdb677ea041.tar.bz2 txr-269f576bf44e02dc78eb84bdef4f5fdb677ea041.zip |
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.
Diffstat (limited to 'lib.c')
-rw-r--r-- | lib.c | 123 |
1 files changed, 30 insertions, 93 deletions
@@ -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; |