我写了一个测试函数来测试我对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?
非常感谢。
答案 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
。