评论者:joeosborn
HEAD 中的这个测试用例出现了同样的异常(对不起,所有的这些事实)
`
(defrel 物品- [物品])
(defrel 类型- [物品] [类型])
(fact 物品- [0])
(fact 物品- [1])
(fact 物品- [2])
(fact 类型- [0] [:player])
(fact 类型- [1] [:dragon])
(fact 类型- [2] [:pig])
(defn 类型-enum [t] [:type t])
(defna 可绘制的- [Key])
([[物品]] (物品- [物品]) (fresh [类型] (类型- [物品] [类型]) (可绘制的- [类型])))
([[(类型-enum :player)]] succeed)
([[(类型-enum :dragon)]] succeed))
(deftest do-fns-work)
(is (= (run* [q] (drawable- [q])) '(0 1))))
`
现在看看,我可能期望一个错误的格式返回值,但关键是连那么远都没走。
使用 REPL,我检查了 (defna 可绘制的- . . .) 的展开(略微整理了一下)
`
(def 可绘制的- (clojure.core/fn ([Key]
(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 (链接: 类型-enum) . . .) 表达式,这正是我不希望在此时见到的。
我不太清楚为什么在这里不行,但匹配测试用例中却没有问题。