help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: 'length' function for lists and cons cells?


From: Drew Adams
Subject: RE: 'length' function for lists and cons cells?
Date: Thu, 21 Mar 2013 13:10:10 -0700

> which function could I use when I map an alist e.g. with dolist, that
> contains both types of associations as shown below: cons 
> cells, or lists with 3 or more elements?
> 
> 'length' doesn't work on cons cells:
> 
> Debugger entered--Lisp error: (wrong-type-argument listp "c")
>   length(("a" . "c"))

It's not clear to me what you're asking.

Are you looking for a "length" function that works for both true lists (but why
do you mention 3 or more elements?) and a cons whose last cdr is a non-nil atom?

If so then it is up to you to define what you want such a "length" to be/mean.
Perhaps what you want is something like this?

(defun thorsten-len (xs)
  (cond ((null xs)       0)
        ((null (cdr xs)) 1)
        ((atom (cdr xs)) 2)
        (t (1+ (thorsten-len (cdr xs))))))

(thorsten-len '(1 2 3 4 . 5)) => 5

(setq foo  '((a . 1) (b 2) (c (3 3 3)) (d 4 4 4 . 4)))
(mapcar #'thorsten-len foo) => (2 2 2 5)

(setq bar  ())
(dolist (ff  foo) (push ff bar))
(reverse bar) => ((a . 1) (b 2) (c  (3 3 3)) (d 4 4 4 . 4))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]