这个Lisp函数的传统名称是什么?

这个Lisp函数的传统名称是什么?,lisp,common-lisp,Lisp,Common Lisp,我在别处见过这个函数,我记得,它有一个标准名称。不过我记不得了,仔细阅读亚历山大图书馆的list.lisp并没有向我透露任何秘密 (defun familiar-function (list func) (loop for e in list collect (if (listp e) (familiar-function e func) (funcall func e)))) 看起来,也叫:

我在别处见过这个函数,我记得,它有一个标准名称。不过我记不得了,仔细阅读亚历山大图书馆的
list.lisp
并没有向我透露任何秘密

(defun familiar-function (list func)
  (loop for e in list
        collect (if (listp e)
                    (familiar-function e func)
                    (funcall func e))))
看起来,也叫:


如注释中所述,您的方法假设树是正确的列表,与链接函数相反,不将函数应用于非nil
cdr
单元格。

我通常在Common Lisp中将树映射命名为maptree,与其他mapxxx函数类似。但是,请注意,这仍然将cons单元格视为列表,而不是任意树(例如,cons的cdr从未调用该函数),因此这与某些树映射函数不同。你链接到的文档会让我觉得树映射会在汽车和cdr上调用fn。@JoshuaTaylor这是真的,我找不到一个完全符合提供的代码的函数。名称树图主要出现在方案练习中。我假设数据点是正确的列表。“这正是我想要的。”保尔纳森我理解,但这是我能找到的最接近的。我不知道您的函数是否有不同的名称。@Paul是的,您提供的函数可以很好地处理列表,但是传统的maptree函数会根据car和cdr下降。例如,映射1+over((1.2.3)会产生((2.3.4),但在(1.2)[即(1.2.Nil))]上会失败,因为Nil不是一个数字。递归的
mapcar
(familiar-function '(() (3 2 3) (2) (2) (55 22 33))
                   #'1+)
=> (NIL (4 3 4) (3) (3) (56 23 34))