评论由:joeosborn发表
在HEAD中,这个测试案例也同样抛出异常(很抱歉所有的事实)
`
(defrel thing- [事物])
(defrel type- [事物] [类型])
(fact thing- [0])
(fact thing- [1])
(fact thing- [2])
(fact type- [0] [:player])
(fact type- [1] [:dragon])
(fact type- [2] [:pig])
(defn type-enum [t] [:type t])
(defna drawable- [键])
([[事物]] (事物- [事物]) (新鲜 [类型] (类型- [事物] [类型]) (可绘制- [类型])))
([[(类型-枚举 :玩家)]] succeed)
([[(类型-枚举 :龙)]] succeed))
(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 (链接:类型-枚举) ...)表单,这正是我不希望在这个案例中看到的内容。
我不太清楚为什么这里不工作,而匹配测试案例中却工作。