diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-07-22 20:41:54 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-07-22 20:41:54 -0700 |
commit | d6760da67732419d8043d1fdc43e8081f96ef1f1 (patch) | |
tree | 021b792bbba89c65d5fbfeaa9132f6325988d11b /lib.c | |
parent | 0dd87c5b673f94f06263ace234e689e953bf3393 (diff) | |
download | txr-d6760da67732419d8043d1fdc43e8081f96ef1f1.tar.gz txr-d6760da67732419d8043d1fdc43e8081f96ef1f1.tar.bz2 txr-d6760da67732419d8043d1fdc43e8081f96ef1f1.zip |
Adding nthcdr as accessor.
* eval.c (eval_init): Register nthcdr function.
* lib.c (nthcdr): New function.
* lib.h (nthcdr): Declared.
* share/txr/stdlib/place.tl (nthcdr): New defplace.
* txr.1: Documented.
Diffstat (limited to 'lib.c')
-rw-r--r-- | lib.c | 13 |
1 files changed, 13 insertions, 0 deletions
@@ -498,6 +498,19 @@ val last(val list) return nullocp(p) ? list : deref(p); } +val nthcdr(val pos, val list) +{ + cnum n = c_num(pos); + + if (n < 0) + uw_throwf(error_s, lit("nthcdr: negative index ~s given"), pos, nao); + + while (n-- > 0) + list = cdr(list); + + return list; +} + loc ltail(loc cons) { while (cdr(deref(cons))) |