评论者:joeosborn
在 HEAD 中这个测试用例也有同样的异常(对不起,关于所有的事实)
`
(defrel thing-) [事物]
(defrel type-) [事物] [类型]
(事实 thing- [0])
(事实 thing- [1])
(事实 thing- [2])
(事实 type- [0] [:玩家])
(事实 type- [1] [:龙])
(事实 type- [2] [:猪])
(defn type-enum [t] [:类型 t])
(defna drawable-) [键]
([[事物]] (事物- [事物]) (新鲜 [类型] (类型- [事物] [类型]) (可绘制- [类型])))
([[(枚举类型 :玩家)]] 成功)
([[(枚举类型 :龙)]] 成功))
(deftest do-fns-work)
(is (= (run* [q] (drawable- [q])) '(0 1))))
`
现在看来,我可能期望一个错误的格式返回值,但问题是,我甚至还没有达到这个程度。
使用 REPL,我检查了 (defna drawable-) 的展开(稍作整理)
`
(def drawable- (clojure.core/fn ([键]
(clojure.core.logic/conda
((clojure.core.logic/fresh [Thing] (clojure.core.logic/== [Thing] Key) (thing- [Thing]) (fresh [Type] (type- [Thing] [Type]) (drawable- [Type]))))
((clojure.core.logic/fresh [type-enum]
(clojure.core.logic/== [(type-enum :player)] Key) succeed))
((clojure.core.logic/fresh [type-enum]
(clojure.core.logic/== [(type-enum :dragon)] Key) succeed))))))
`
注意 (clojure.core.logic/fresh (链接:枚举类型) . . .) 形式,这正是我不希望在这个情况下看到的。
我真心不确定为什么这里不工作,而匹配测试用例却可以工作。