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

Pau*_*han 2 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))))
Run Code Online (Sandbox Code Playgroud)

cor*_*ump 5

它看起来像tree-map,也被称为maptree:

(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单元格,这与链接函数相反.

  • 我通常在Common Lisp中将**tree-map**命名为**maptree**,与其他**mapxxx**函数相似.但是,请注意,这仍然将cons单元格视为列表,而不是任意树(例如,函数永远不会使用consr的cdr调用),因此这与某些树映射函数不同.您链接到的文档会让我认为**tree-map**会在汽车和cdr上调用fn. (2认同)