【问题标题】:Remove list from list of lists Clojure从列表列表中删除列表 Clojure
【发布时间】:2015-11-30 15:02:01
【问题描述】:

我有一个列表,例如:

(def lst '((a b c) (d e) (f g h)))

我需要创建一个删除了其中一个内部列表的新列表, 我试过了

(remove '(d e) lst)

返回

java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to clojure.lang.IFn

我也试过

(filter (not= '(d e)) lst)

返回

java.lang.ClassCastException: null

【问题讨论】:

  • 请查看 Clojure 文档;您可能想退后一步来熟悉如何学习该语言。这两个状态的文档都表示他们期望一个函数,例如,将引用列表传递给 remove 违反了这一点。

标签: clojure


【解决方案1】:

如果你想使用filter,注意第一个参数必须是一个函数,所以你可以使用

(filter #(not= '(d e) %) lst)

这就是您收到ClassCastException 的原因。

remove 也是如此。您也可以使用partial 代替匿名函数:

(remove (partial = '(d e)) lst)

【讨论】:

    【解决方案2】:

    filter 和 remove 函数都期望第一个参数是谓词函数。您可以使用partial 函数将运算符= 转换为谓词:

    (remove (partial = '(d e)) lst)
    

    【讨论】:

      猜你喜欢
      • 2020-01-23
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多