954,174 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Lisp help - is this function right?

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.

Mr.
Newbie Poster
18 posts since May 2005
Reputation Points: 10
Solved Threads: 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).

Rashakil Fol
Super Senior Demiposter
Team Colleague
2,658 posts since Jun 2005
Reputation Points: 1,135
Solved Threads: 176
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You