diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2016-12-10 20:06:38 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2016-12-10 20:06:38 -0800 |
commit | 1ca65fef46ca68ca18e3db5a5eac316d5cf25799 (patch) | |
tree | 1e8f093a8dafc5467b2c88afe8fd3f633e3e8d64 | |
parent | 22c3bc10879cc1ee73e8a057f772d4619a0e8d00 (diff) | |
download | txr-1ca65fef46ca68ca18e3db5a5eac316d5cf25799.tar.gz txr-1ca65fef46ca68ca18e3db5a5eac316d5cf25799.tar.bz2 txr-1ca65fef46ca68ca18e3db5a5eac316d5cf25799.zip |
New function: endp.
This improves compatibility with other Lisp dialects
in a small way.
* eval.c (eval_init): Register endp intrinsic.
* lib.c (endp): New function.
* lib.h (endp): Declared.
* txr.1: Documented endp.
-rw-r--r-- | eval.c | 1 | ||||
-rw-r--r-- | lib.c | 10 | ||||
-rw-r--r-- | lib.h | 1 | ||||
-rw-r--r-- | txr.1 | 25 |
4 files changed, 37 insertions, 0 deletions
@@ -5139,6 +5139,7 @@ void eval_init(void) reg_fun(intern(lit("consp"), user_package), func_n1(consp)); reg_fun(intern(lit("lconsp"), user_package), func_n1(lconsp)); reg_fun(intern(lit("listp"), user_package), func_n1(listp)); + reg_fun(intern(lit("endp"), user_package), func_n1(endp)); { val proper_list_p_f = func_n1(proper_list_p); reg_fun(intern(lit("proper-listp"), user_package), proper_list_p_f); @@ -2758,6 +2758,16 @@ val listp(val obj) return if2(obj == nil || consp(obj), t); } +val endp(val obj) +{ + if (obj == nil) + return t; + if (consp(obj)) + return nil; + uw_throwf(error_s, lit("endp: list improperly terminated by ~s"), + obj, nao); +} + val proper_list_p(val obj) { while (consp(obj)) @@ -606,6 +606,7 @@ val consp(val obj); val lconsp(val obj); val atom(val obj); val listp(val obj); +val endp(val obj); val proper_list_p(val obj); val length_list(val list); val getplist(val list, val key); @@ -17046,6 +17046,31 @@ installations should use .codn proper-listp , but its use going forward is deprecated. +.coNP Function @ endp +.synb +.mets (endp << object ) +.syne +.desc +The +.code endp +function returns +.code t +if +.meta object +is the object +.codn nil . + +If +.meta object +is a cons cell, then +.code endp +returns +.codn t . + +Otherwise, +.code endp +function throws an exception. + .coNP Function @ length-list .synb .mets (length-list << list ) |