由: joeosborn 添加评论
HEAD中的这个测试案例同样出现异常(抱歉所有的专著都出问题)
`
(defrel 事物- [事物])
(defrel 类型- [事物] [类型])
(fact 事物- [0])
(fact 事物- [1])
(fact 事物- [2])
(fact 类型- [0] [:玩家])
(fact 类型- [1] [:龙])
(fact 类型- [2] [:猪])
(defn 类型-枚举 [t] [:类型 t])
(defna 可绘制的- [键])
([[事物]] (事物- [事物]) (fresh [类型] (类型- [事物] [类型]) (可绘制的- [类型])))
([[(类型-枚举 :玩家)]] succeed)
([[(类型-枚举 :龙)]] succeed))
(deftest do-fns-work)
(is (= (run* [q] (drawable- [q])) '(0 1))))
`
现在我看看它,我可能期望一个错误的格式返回值,但关键是连那个都没达到。
使用REPL,我查看了(defna 可绘制的-)的展开(稍作整理)
`
(def 可绘制的- (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 (链接: 类型-枚举) ...) 形式,这正是在这种情况下我不想看到的。
我实在不确定为什么这里不工作,而在matche测试案例中却工作了。