Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
4clojure:集合交集,递归lambda_Clojure - Fatal编程技术网

4clojure:集合交集,递归lambda

4clojure:集合交集,递归lambda,clojure,Clojure,我试图编写一个递归lambda函数(接受两个参数),用于查找两个(可能)未排序集之间的交集。以下是代码,我相信大多数人会直接找到: (fn intersection [a b] (fn inner [x y out] (if (empty? x) out (if (nil? (some ((set (first x)) y ))) (inner (rest x) y out)))) (inner (rest x) y (cons (first x) out)) (

我试图编写一个递归lambda函数(接受两个参数),用于查找两个(可能)未排序集之间的交集。以下是代码,我相信大多数人会直接找到:

(fn intersection [a b]
(fn inner [x y out]
  (if (empty? x) out
  (if (nil? (some ((set (first x)) y )))
    (inner (rest x) y out))))
    (inner (rest x) y (cons (first x) out))
    (inner a b '[])
)
我希望使用这个lambda函数交集来代替下面的下划线uu:

(=({01123}{23445}){233})

然而,这段代码未能编译,坚持认为Java在这个上下文中无法解析symbol:INTERNAR

有什么建议吗

来源:

您可以尝试:

#(set (filter %1 %2))
因为集合是函数(参见另一个有用的示例)。
%1
%2
的语法与书写相同:

(fn [s1 s2] (set (filter s1 s2)))
或者更简洁地说:

(comp set filter)
关于
内部
错误,您只是将参数放错了位置(但我真的看不出其他逻辑):

如果您坚持手动构建集合(我不久前没有这么做),您可能会得到类似的结果:

(fn [s1 s2]
  (reduce #(if (contains? s2 %2) (conj %1 %2) %1) #{} s1))

但实际上第一个解决方案是最优雅的。

如果错误描述有点简练,那就很抱歉了,但感觉好像我们一直在绕圈寻找解决这个问题的方法,已经有一段时间了:(交集接受两个参数并返回另一个集,对吗?那么为什么要返回一个函数?
(fn [s1 s2]
  (reduce #(if (contains? s2 %2) (conj %1 %2) %1) #{} s1))