我知道这可能是一个愚蠢的问题,但我不明白.我有一些数据:
(def x (range 1 14))
-> (1 2 3 4 5 6 7 8 9 10 11 12 13)
我想返回一个没有"3"的列表.谷歌搜索"clojure从列表中删除项目"带我到这个:
  (remove pred coll)
所以我试着用例子even?:
  (remove even? x) 
  -> (1 3 5 7 9 11 13)
大!它适用于我的数据!我只需要改变pred.我的第一个猜测是:
  (remove (= 3) x)
  java.lang.ClassCastException: java.lang.Boolean cannot be cast to clojure.lang.IFn
好的,我们不需要评估(= 3),所以我们#先说:
  (remove #(= 3) x)
  clojure.lang.ArityException: Wrong number of args (1)` passed to...
我知道这是微不足道的,但我怎么能这样做呢?
小智 7
我喜欢用套装来做这种事情.好干净..
删除元素:
(remove #{3 5} [1 2 3 4 5 6 7 8 9])
保持元素:
(keep #{7 5 3} [1 2 3 4 5 6 7 8 9])
检查元素是否存在:
(some #{5} [1 2 3 4 5 6 7 8 9])
这是有效的,因为当一个集合被用作一个参数的函数时,如果它在集合内部,则返回该参数.在删除实例中,元件3和5使所述组返回一个truthy值:自己.对于keep和some示例都会发生同样的事情,除了some示例还有一个额外的好处,就是返回集合中第一个也在集合中的元素.
您应该使用:
(remove #(= 3 %) x)
#(= 3)不接受参数(但remove尝试将一个参数传递给该函数)。
#(= 3 %)接受一个参数,并=使用该参数(%)和进行调用3。
| 归档时间: | 
 | 
| 查看次数: | 1481 次 | 
| 最近记录: |