0

Hello,

the listp function doesn't apply the full "list" rules.

Example

(cons 1 ( cons 2 3 ))

Isn't a list as the definition goes:

* either an empty list (nil)
* or a cons cell that has a list for a cdr

altough listp yelds true to that "list"

So I'm writing a function that will do the full thing

(defun isList (list)
   (if (null list)
        t
        (if (not (consp list ))
             nil
             (and t (isList (cdr list))))))

This is correct for the following examples

(cons 1 ( cons 2 ( cons 3 ( cons 4 5 ))))
returns nil
(cons 1 (cons 2 3))
returns nul
(cons 1 ( cons 2 ( cons 3 ( cons 4 nil ))))
returns t
(1 2)
returns t

It seams ok. Is it?

Thamls.

2
Contributors
1
Reply
3
Views
11 Years
Discussion Span
Last Post by Rashakil Fol
0

It looks like a fine implementation of the behavior of the Scheme function, LIST?. I don't know why you'd use (and t (isList (cdr list))) when that means the same thing as (isList (cdr list)) .

However, Common Lisp (I'll assume that's the variant you're using, since you didn't specify) has a different meaning for listp.

listp object

listp is true if its argument is a cons or the empty list (), and otherwise is false. It does not check for whether the list is a ``true list'' (one terminated by nil) or a ``dotted list'' (one terminated by a non-null atom).

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.