3

正在使用clojure.set. join有两个参数应该做一个自然连接。

加载它:

user=> (use 'clojure.set)
nil

这是有道理的——如果连接的任一侧有 0 行,结果也应该如此:

user=> (join [{:a 1 :b 2}] [])
#{} 

这也是有道理的——同名列(全部为 0 :))具有相同的值:

user=> (join [{:a 1 :b 2}] [{}])
#{{:a 1, :b 2}}

同样的事情:

user=> (join [{:a 1 :b 2}] [{:c 3}])        
#{{:c 3, :a 1, :b 2}}

但在这里我迷路了:

user=> (join [{:a 1 :b 2}] [{:a 2 :b 1} {}])
#{}

我之前加入{:a 1 :b 2}{},并得到了一个行。我错过了什么?

4

1 回答 1

3

根据您的看法,它要么是 中的错误join,要么是调用代码中的错误,将{:a 2 :b 1}{}视为同一关系的成员;我倾向于后者。

Specifically why this is happening is that the intersection of keys of the two relations is calculated one time using the first map of each relation. That's also why you'd get different results if you swap the position of the two maps in the second relation.

于 2011-11-18T00:13:19.043 回答