用于筛选列表并将函数应用于未筛选元素的常见Lisp习惯用法?

用于筛选列表并将函数应用于未筛选元素的常见Lisp习惯用法?,lisp,common-lisp,idioms,Lisp,Common Lisp,Idioms,这方面的常见Lisp习惯用法是什么: 删除列表中不满足谓词和的元素 那些满足谓词的应用函数 这是常见的Lisp习惯用法吗: mapcar applied to remove-if 习惯用法将结束,因为您希望保留与谓词匹配的元素。根据标准,-IF-NOT函数被弃用,但对于常见的Lisp,弃用大多是毫无意义的1,因此我们很少看到有人使用 然而,大多数人会在这里使用: over可能存在的一个问题是,它将为临时列表分配内存,以便在之后丢弃它。你可以称之为过早优化,但如果我想使用高阶函数(例如,因为我想

这方面的常见Lisp习惯用法是什么:

删除列表中不满足谓词和的元素 那些满足谓词的应用函数

这是常见的Lisp习惯用法吗:

mapcar applied to remove-if
习惯用法将结束,因为您希望保留与谓词匹配的元素。根据标准,
-IF-NOT
函数被弃用,但对于常见的Lisp,弃用大多是毫无意义的1,因此我们很少看到有人使用

然而,大多数人会在这里使用:

over可能存在的一个问题是,它将为临时列表分配内存,以便在之后丢弃它。你可以称之为过早优化,但如果我想使用高阶函数(例如,因为我想使用广义序列而不是列表),我会使用:

1.“所有标记为已弃用的内容都可以视为未弃用,因为不会有其他标准。”。

是的,如果+1将未被欣赏的地图提到地图中,则是mapcar过度删除。
(lambda (elements test function)
  (loop
    for e in elements
    when (funcall test e)
      collect (funcall function e)))
(lambda (elements test function)
  (let ((tmp (remove-if-not test elements)))
    (map-into tmp function tmp)))