Lisp 收集满足谓词的子树的函数的标准名称?

Lisp 收集满足谓词的子树的函数的标准名称?,lisp,common-lisp,Lisp,Common Lisp,我几乎在我编写的每一个Lisp程序中都必须重新实现一个特定的函数。因为这个函数非常有用,所以它以前一定实现过。我希望它会广为人知。也许它是CommonLisp标准库的一部分。它叫什么?它来自哪个图书馆 (defun unknown-function (predicate tree) (loop for item in tree if (funcall predicate item) collect item else if (listp item) app

我几乎在我编写的每一个Lisp程序中都必须重新实现一个特定的函数。因为这个函数非常有用,所以它以前一定实现过。我希望它会广为人知。也许它是CommonLisp标准库的一部分。它叫什么?它来自哪个图书馆

(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)))

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

我最初的陈述是错误的,因为子列表在下一步进入之前由谓词测试的微妙之处。这是给子孙后代的:

这个没有标准的名字。它只是将列表列表展平和筛选出不满足谓词的元素的组合。在Common Lisp中,没有内置的展平,但它将是您自己的展平和标准的组合


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

我的原始陈述是错误的,因为子列表在降级之前由谓词测试。这是给子孙后代的:

这个没有标准的名字。它只是将列表列表展平和筛选出不满足谓词的元素的组合。在Common Lisp中,没有内置的展平,但它将是您自己的展平和标准的组合


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

通常,您尝试执行的任务是通过组合两个不同的函数来解决的,一个用于展平树,另一个用于从该列表中过滤元素。在Common Lisp中没有展平原语函数(但如果你搜索它,你会发现很多定义,例如,请参见),而对于filter函数,你可以使用remove if或remove if not()。
flatte
remove if not
无法生成此函数,因为谓词可以从树中选择子列表,而
展平
将在谓词有机会看到子列表之前除去所有子列表。通常,您尝试执行的任务是通过组合两个不同的函数来解决的,一个用于展平树,另一个用于从该列表中筛选元素。在Common Lisp中没有展平原语函数(但如果你搜索它,你会发现很多定义,例如,请参见),而对于filter函数,你可以使用remove if或remove if not()。
flatte
remove if not
无法生成此函数,因为谓词可以从树中选择子列表,而
flatte
将在谓词有机会看到它们之前除去所有子列表。不完全是这样。在我的未知函数中,谓词可以从树中选择子列表,但是一个通用的
flatten
函数将在
remove if not
有机会将它们传递给谓词之前除去所有子列表。哦,这是一个非常好的观点!我认为,这与subst和subst有更多的共同点。这仍然不是一个完美的匹配,但我已经更新了我的答案。在一个流行的库中有类似的东西吗?类似于什么?类似于我问题中的
未知函数
。不完全一样。在我的未知函数中,谓词可以从树中选择子列表,但是一个通用的
flatten
函数将在
remove if not
有机会将它们传递给谓词之前除去所有子列表。哦,这是一个非常好的观点!我认为,这与subst和subst有更多的共同点。这仍然不是一个完美的匹配,但我已经更新了我的答案。在一个流行的库中有类似的东西吗?类似于什么?类似于我问题中的
未知函数。