我正在尝试从列表或集合中删除元素,如下所示:

(remove :Veronica (list :Veronica :Hailey))

它不起作用,因此,我去了删除文档,说我需要将谓词传递给remove函数。但是以下代码有效:
(remove #{:foo} [:foo :bar])
(remove #{:foo} (list :foo :bar))

#{:foo}是一组。为什么行得通?

是一个功能吗?

谢谢

最佳答案

为什么下面

(remove :Veronica (list :Veronica :Hailey))
;(:Veronica :Hailey)
  • 通过聚会吗?
  • 有没有明显的作用?


  • 诸如:Veronica之类的关键字是一种接受一个参数的函数,因此可以用作谓词。

    但是...
  • 它需要一个map或set参数。
  • 然后在参数中查找自己。

  • 例如,
    (:Veronica #{:Veronica})
    ;:Veronica
    
    (:Veronica #{1 2 "Buckle my shoe"})
    ;nil
    

    它还宽恕了无用的参数:
    (:Veronica 4) ; 4 is not a map or set.
    ;nil
    

    因此(:Veronica :Veronica)(:Veronica :Hailey)都是nil,因此
    (remove :Veronica (list :Veronica :Hailey))
    

    ...不会做任何事情,因为谓词总是评估false(ish)。

    其他解决方案说明了原因
    (remove #{:foo} (list :foo :bar))
    

    ...具有您想要的效果。

    08-26 22:09