простая функция LISP - PullRequest
       6

простая функция LISP

2 голосов
/ 03 декабря 2009

Я написал тестовую функцию для проверки моего понимания "return-from" в Лиспе

(defun testp (lst)
  (mapc #'(lambda (x y)
            (if (null lst)
                (return-from testp t)))
        lst
        (cdr lst)))

Я думаю, что тест (testp 'nil) должен вернуть T, но он возвращает NIL. Не могли бы вы помочь моему пониманию того, почему он возвращает NIL?

Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 03 декабря 2009

Обычно mapc применяет вашу лямбду к каждому элементу списка. Мое предположение (я не использую Common Lisp) состоит в том, что, поскольку mapc не имеет элементов в списке для работы, ваша лямбда-функция никогда не вызывается вообще, и в результате возвращаемое значение вашей функции является возвращаемым mapc, который (так как он ничего не отобразил) равен nil.

3 голосов
/ 03 декабря 2009

Вы вызываете MAPC по двум пустым спискам.

Как использовать функцию LAMBDA, если в списках нет элементов для отображения?

Кстати, вы можете написать «список» вместо «lst».

(defun testp (list)
  (mapc #'(lambda (x y)
            (if (null list)
                (return-from testp t)))
        list
        (cdr list)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...