函数收集子句的标准名称是否满足谓词?

时间:2016-04-06 05:41:55

标签: lisp common-lisp

我必须在我编写的每个Lisp程序中重新实现一个特定的函数。由于此功能非常有用,因此必须先实现。我希望它是众所周知的。也许它是Common Lisp标准库的一部分。它叫什么,它来自哪个库?

(defun unknown-function (predicate tree)
    (loop for item in tree
        if (funcall predicate item) collect item
        else if (listp item) append (unknown-function predicate item)))

它通过树下降并创建该树中满足谓词的所有节点的平面列表。

1 个答案:

答案 0 :(得分:0)

我原来的陈述是错误的,因为其中的子列表在它们下降之前由谓词进行测试。对于后人来说,这就是:

  

这没有标准名称。它只是展平列表列表并过滤掉不满足谓词的元素的组合。在Common Lisp中,没有内置的flatten,但它是你自己的 flatten 和标准 remove-if-not的组合。

这与subst函数族有一点共同之处,它们除了叶子之外还检查子树。但是,它们正在替换树中的个体元素,而不是完全删除它们。因此, subst-if subst-if-not 有一些共同点,但它们仍然不是完美的匹配。