LINUX.ORG.RU

question for LISP hackers


0

0

Имеем Lisp-код:

(defun DOF (lis)
      (do
           (
              (newlist nil (cons (abs (car lis)) newlist))
           )
           ((null lis) (reverse newlist))
           (setq lis (cdr lis))
       )
)

(print (DOF '(-1 -2 -3)))

Должно печататься (1 2 3).
Интерпретатор - clisp 2.27
Идет ругань: *** - argument to ABS should be a number: NIL.
Но список lis определен (аргумент функции DOF), стало быть, и (car lis) тоже определен.
Кто может прояснить это дело ?

Thanx.

(car NIL) есть NIL. Оно сначала огребает NIL, а потом проверяет
условие.

Я бы do не пользовался, а сделал бы рекурсивно:
(defun DOFR (l) 
  (if (null l) 
    '() 
     (cons (abs (car l)) 
           (DOFR (cdr l)))))

Antichrist
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.