一个简单的lisp函数

时间:2009-12-03 16:22:53

标签: lisp

我写了一个测试函数来测试我对Lisp中“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 个答案:

答案 0 :(得分:3)

您通过两个空列表调用MAPC。

如果列表没有要映射的任何元素,应如何使用LAMBDA功能?

不过,你可以写'list'而不是'lst'。

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

答案 1 :(得分:3)

通常,mapc会将lambda应用于列表的每个元素。我的猜测(我不使用Common Lisp)是因为mapc没有列表中的元素可以操作,所以你的lambda根本就不会被调用,因此你的函数的返回值就是返回值mapc的值(因为它映射为空),为nil