我在其他地方看过这个功能,我记得,它有一个标准名称.我记不起来了,仔细阅读亚历山大的list.lisp图书馆并没有透露任何秘密.
(defun familiar-function (list func)
(loop for e in list
collect (if (listp e)
(familiar-function e func)
(funcall func e))))
Run Code Online (Sandbox Code Playgroud)
(familiar-function '(() (3 2 3) (2) (2) (55 22 33))
#'1+)
=> (NIL (4 3 4) (3) (3) (56 23 34))
Run Code Online (Sandbox Code Playgroud)
正如评论中所提到的,您的方法假设树是正确的列表,并且不将该函数应用于非零cdr单元格,这与链接函数相反.