From 640a272f369406e7e433354959f4e8e53f68088f Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 25 Jun 2019 06:51:17 -0700 Subject: seqp: expand definition of sequences. * lib.c (seqp): Use seq_info to classify the object as a sequence. * txr.1: Update description of seqp. --- lib.c | 14 ++------------ txr.1 | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/lib.c b/lib.c index 746f0e72..95e7573c 100644 --- a/lib.c +++ b/lib.c @@ -1021,18 +1021,8 @@ val nullify(val seq) val seqp(val obj) { - switch (type(obj)) { - case NIL: - case CONS: - case LCONS: - case VEC: - case STR: - case LSTR: - case LIT: - return t; - default: - return nil; - } + seq_info_t si = seq_info(obj); + return tnil(si.kind != SEQ_NOTSEQ); } loc list_collect(loc ptail, val obj) diff --git a/txr.1 b/txr.1 index a7df3a1f..7b640f76 100644 --- a/txr.1 +++ b/txr.1 @@ -27715,11 +27715,26 @@ if is a sequence, otherwise .codn nil . -A sequence is defined as a list, vector or string. The object +Lists, vectors and strings are sequences. The object .code nil denotes the empty list and so is a sequence. +Objects of type +.code buf +and +.code carray +are sequences, as are hash tables. + +Structures which implement the +.code length +or +.code car +methods are considered sequences. + +No other objects are sequences. However, future revisions of +the language may specify additional objects that are sequences. + .coNP Functions @ length and @ len .synb .mets (length << object ) -- cgit v1.2.3